Boser
20-03-2008, 19:27
Salve a tutti,
ho un problemino a run-time (il compilatore in fase di compilazione non segnala errori) con questo codice:
#include <iostream.h>
#include <stdlib.h>
class Persona {
private:
char* nome;
char* cognome;
public:
Persona();
Persona(char* , char* );
void stampaPersona();
};
Persona::Persona() {
cout << "Non e' stato inizializzato l'attributo NOME, inseriscine uno: ";
cin >> nome;
cout << endl;
nome = NULL;
cout << "Non e' stato inizializzato l'attributo COGNOME, inseriscine uno: ";
cin >> cognome;
cout << endl;
}
Persona::Persona(char* name, char* surname) {
nome = name;
cognome = surname;
}
int main ()
{
Persona persona1;
Persona persona3;
Persona persona2("mario", "rossi");
return 0;
}
Dopo aver definito la classe Persona, procedo nel main con l'istanziazione di due oggetti di tale classe...Dopo aver compilato, provo a runnare...appena inserisco il nome di persona1 il programma va in segmentation fault e crasha.
Debuggando scopro che quando viene istanziato il primo oggetto persona1 e viene quindi chiamato il costruttore di default, il puntatore a char dell'attributo nome punta in una zona di memoria - 0x23f - taggata nel debugger con la dicitura "<Address 0x23f out of bounds>". Lo stesso NON succede per l'attributo puntatore a char cognome: infatti, se commento il pezzo
/*
cout << "Non e' stato inizializzato l'attributo NOME, inseriscine uno: ";
cin >> nome;
cout << endl;
*/
il programma fila liscio normalmente.
Inoltre, continuando ad eseguire le istruzioni nel main
Persona persona3;
Persona persona2("mario", "rossi");
il programma NON dà più alcun problema nè richiamando il costruttore di default nè chiamando il costruttore con parametri (nemmeno quando vado ad inizializzare l'attributo nome); quasi come se il problema si presentasse se e solo se l'oggetto istanziato è il primo in ordine temporale :mbe:
Sapreste indicarmi una possibile soluzione?
Grazie mille!
p.s. uso dev-c++ versione 4.01 con debugger insight su win xp
ho un problemino a run-time (il compilatore in fase di compilazione non segnala errori) con questo codice:
#include <iostream.h>
#include <stdlib.h>
class Persona {
private:
char* nome;
char* cognome;
public:
Persona();
Persona(char* , char* );
void stampaPersona();
};
Persona::Persona() {
cout << "Non e' stato inizializzato l'attributo NOME, inseriscine uno: ";
cin >> nome;
cout << endl;
nome = NULL;
cout << "Non e' stato inizializzato l'attributo COGNOME, inseriscine uno: ";
cin >> cognome;
cout << endl;
}
Persona::Persona(char* name, char* surname) {
nome = name;
cognome = surname;
}
int main ()
{
Persona persona1;
Persona persona3;
Persona persona2("mario", "rossi");
return 0;
}
Dopo aver definito la classe Persona, procedo nel main con l'istanziazione di due oggetti di tale classe...Dopo aver compilato, provo a runnare...appena inserisco il nome di persona1 il programma va in segmentation fault e crasha.
Debuggando scopro che quando viene istanziato il primo oggetto persona1 e viene quindi chiamato il costruttore di default, il puntatore a char dell'attributo nome punta in una zona di memoria - 0x23f - taggata nel debugger con la dicitura "<Address 0x23f out of bounds>". Lo stesso NON succede per l'attributo puntatore a char cognome: infatti, se commento il pezzo
/*
cout << "Non e' stato inizializzato l'attributo NOME, inseriscine uno: ";
cin >> nome;
cout << endl;
*/
il programma fila liscio normalmente.
Inoltre, continuando ad eseguire le istruzioni nel main
Persona persona3;
Persona persona2("mario", "rossi");
il programma NON dà più alcun problema nè richiamando il costruttore di default nè chiamando il costruttore con parametri (nemmeno quando vado ad inizializzare l'attributo nome); quasi come se il problema si presentasse se e solo se l'oggetto istanziato è il primo in ordine temporale :mbe:
Sapreste indicarmi una possibile soluzione?
Grazie mille!
p.s. uso dev-c++ versione 4.01 con debugger insight su win xp