pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009
-
10 févr. 2009 à 15:25
pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009
-
10 févr. 2009 à 17:01
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.
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 10 févr. 2009 à 15:31
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
ed73
Messages postés276Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention15 avril 20132 10 févr. 2009 à 15:37
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.
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 10 févr. 2009 à 15:38
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 10 févr. 2009 à 16:20
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
pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009 10 févr. 2009 à 17:01
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!