Premierement, merci de lire ce post, et merci a tous ceux qui veulent maider.
Jai le probleme suivant:
Jassigne des char* avec 'new[]' dans le constructeur d'une classe, et je les free avec un 'delete[]' dans le destructeur.
le probleme, c'est que sa plante au destructeur, et que les pointeurs sont bel et bien initalizer, et le error-chjecking autour aussi.
void ClEmployee::AllocateMembers()
{
firstName = new char[HALF_MAX_SQL_BUFFER_SIZE];
lastName = new char[HALF_MAX_SQL_BUFFER_SIZE];
email = new char[HALF_MAX_SQL_BUFFER_SIZE];
role = new char[HALF_MAX_SQL_BUFFER_SIZE];
telephone = new char[QUARTER_MAX_SQL_BUFFER_SIZE];
extension = new char[QUARTER_MAX_SQL_BUFFER_SIZE];
if (!firstName || !lastName || !email || !role || !telephone || !extension)
{
Log("Not enough memory to allocate for buffer(s)\n");
}
}
bool ClEmployee::Refresh()
{
if (!firstName || !lastName || !email || !role || !telephone || !extension)
{
Log("Buffer(s) not initialized or not enough memory\n");
return false;
}
if(!sql->IsConnected())
{
Log("SQL connection not connected\n");
return false;
}
ASSOC_ARRAY buffer;
if(!sql->Query("select * from employees",&buffer))
{
Log("Internal SQL error\n");
return false;
}
for(int i=0;i < buffer.num_rows(); ++i)
{
strcpy( firstName,buffer[i]["firstName"]);
strcpy( lastName,buffer[i]["lastName"]);
strcpy( email,buffer[i]["email"]);
strcpy( role,buffer[i]["role"]);
strcpy( telephone,buffer[i]["telephone"]);
strcpy( extension,buffer[i]["extension"]);
}
}
----------------
Le programe compile bien, mais une fois executer et detruit, sa plante...
Le fichier main.cpp fait une simple declaration 'static' de la classe et lui passe les arguments.
Quand je met en commentaire 'FreeMembers()' du destructeur, la classe roule nickel.
Se pourrait-il que le destructeur detruise automatiquement les char* allocater dynamiquement?
Encore une fois merci.
Salut
Oui effectivement là c'est illisible. Essaye de copier coller ton code depuis un autre éditeur de texte. (notepad par ex)
A+
____________________________________________________________________________
Mon site internet :
http://ImAnalyse.free.fr
Bon c'est pas très lisible mais ta classe parait correcte. Le problème vient peut-être du fait que tu invoques plusieurs fois la méthode FreeMember en amont.
Hello,
Je vois ptet quelqque chose qui pourrait causer le problème: dans ton destructeur, après chaque delete, penses bien à mettre tes pointeurs à NULL
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le destructeur ne détruit pas les char allouer dynamiquement. Puisque c'est à la destruction de char* que ce produit le crash, cela signifie que ta variable est corrompue. Il faut que tu vérifies partout que tu ne sort pas de ton tableau.
A+
____________________________________________________________________________
Mon site internet :
http://ImAnalyse.free.fr
Jai realizer que le probleme semble venir de deleter 'email' et 'role' dans le destructeur.
Je ne sais pas pourquoi, mais je vais continuer mon investigation...Je vous laisserai savoir le resultat si je trouve!