Segmentation fault

di Anonimizzato23873 il
6 risposte
Salve, non riesco a capire perchè va in segmentation fault, l'algoritmo ins è corretto perchè l'ho preso dal prof..
#include<iostream>
using namespace std;
template <class T>
struct nodo
{
	T val;
	nodo<T>* left;
	nodo<T>* right;
	nodo<T>* padre;
	int mul;
};
template <class H> 
class MultiBST
{
	public:
		//virtual MultiBST<H>* ins(H x)=0;
		//virtual int multiplicity(H x)=0;
		//virtual void inorder()=0;
};
template <class H>
class MyMultiBST : public MultiBST<H>
{
	private:
		nodo<H>* radice;
	public:
		MyMultiBST()
		{
			radice=NULL;
		}
		void ins(H valore)
		{
	nodo<H>* nuovo= new nodo<H>; 
	nodo<H>* x=radice, *y=NULL; 
	
	nuovo->val=valore;
	nuovo->left=nuovo->right=NULL;
	while(x!=NULL) {
		y=x; 
		if (valore < x->val) x=x->left; 
		else x=x->right; 
		}
	nuovo->padre=y; 
	if (y==NULL) radice=nuovo; 

	else if (valore < y->val) y->left=nuovo; 
	else y->right=nuovo;
}
	/*	void inorder(nodo<H>* p)
		{
			inorder(p->left);
			cout<<p->val;
			inorder(p->right);
		}*/
		
			 
	
};
int main()
{
	MyMultiBST<int>* albero;
	albero->ins(1);
}

6 Risposte

  • Il fatto che l'abbia scritto il prof non vuol dire che sia per forza corretto. Il fatto poi che sia corretto non vuol dire per forza che vada bene.
    Ad esempio non viene controllato il valore di ritorno della new ... cosa succede se ritorna null?
    Ti consiglio di inserire una printf per ogni riga di codice per individuare il punto critico, poi ne riparliamo.
  • Ad esempio non viene controllato il valore di ritorno della new ... cosa succede se ritorna null?
    new solleva un'eccezione se non riesce ad allocare.
  • 
    int main()
    {
       MyMultiBST<int>* albero;
       albero->ins(1);
    }
    
    Sicuro, sicuro che sia questo il main?
  • Non può ritornare null se inseriamo un elemento, dove devo mettere le cout?


    Penso che vada più che bene quel main
  • Era sbagliato il main, grazie shodan!!
  • Va bene lasciate pure la new senza controlli ...
Devi accedere o registrarti per scrivere nel forum
6 risposte