begin process at 2012 02 10 16:40:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

char* dans un destructeur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

char* dans un destructeur

mardi 10 février 2009 à 15:25:26 | char* dans un destructeur

pepsidrinker

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. Voici mon code: ------------------------ #include "Core.h" class ClEmployee:public ClDBCoreObject { public: ClEmployee(int pi_id,ClSQL* pi_sql); ClEmployee(); ~ClEmployee(); bool Refresh(); void FreeMembers(); void AllocateMembers(); char* firstName; char* lastName; char* email; char* role; char* telephone; char* extension; }; ClEmployee::~ClEmployee() { FreeMembers(); } void ClEmployee::FreeMembers() { if(firstName!=NULL) delete [] firstName; if(lastName!=NULL) delete [] lastName; if(email!=NULL) delete [] email; if(role!=NULL) delete [] role; if(telephone!=NULL) delete [] telephone; if(extension!=NULL) delete [] extension; } 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"); } } ClEmployee::ClEmployee() {} ClEmployee::ClEmployee(int pi_id,ClSQL* pi_sql) { if(pi_id <0) return; id = pi_id; if(!pi_sql) return; sql = pi_sql; firstName = NULL; lastName = NULL; email = NULL; role = NULL; telephone = NULL; extension = NULL; AllocateMembers(); Refresh(); } 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.
mardi 10 février 2009 à 15:26:23 | Re : char* dans un destructeur

pepsidrinker

vrmt desoler pour le formatage... si je px faire kkchose pour sa, laisse moi le savoir. je ne vois pas de tag null part...
mardi 10 février 2009 à 15:31:32 | Re : char* dans un destructeur

Pistol_Pete

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 :
  
[ Lien ]

mardi 10 février 2009 à 15:37:28 | Re : char* dans un destructeur

ed73

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.

Essayes déjà :
 
if(firstName!=NULL) { delete [] firstName; firstName = NULL; }

au moins ça ne plantera plus.



mardi 10 février 2009 à 15:38:43 | Re : char* dans un destructeur

buno

Administrateur CodeS-SourceS
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...
mardi 10 février 2009 à 15:44:07 | Re : char* dans un destructeur

pepsidrinker

Jai changer le code pour ceci: --- void ClEmployee::FreeMembers() { if(firstName!=NULL) { delete [] firstName; firstName=NULL; } if(lastName!=NULL) { delete [] lastName; lastName=NULL; } if(email!=NULL) { delete [] email; email=NULL; } if(role!=NULL) { delete [] role; role=NULL; } if(telephone!=NULL) { delete [] telephone; telephone=NULL; } if(extension!=NULL) { delete [] extension; extension=NULL; } } malgee vont bon conseils, sa ne fonctionne tjrs pas...
mardi 10 février 2009 à 16:20:22 | Re : char* dans un destructeur

Pistol_Pete

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 :
  
[ Lien ]

mardi 10 février 2009 à 17:01:07 | Re : char* dans un destructeur

pepsidrinker

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!


Cette discussion est classée dans : buffer, sql, char, if, clemployee


Répondre à ce message

Sujets en rapport avec ce message

analyseur lexical pascal [ par perrotta ] Bonjour, dsl pour ma langue je parle pas bien le français; je suis entrin de devlopper un analyseur lexical pour un programme (pascal) prèci ,et j'ai Probleme wsock protocole HTTP [ par Target67 ] Alors je veux faire une petite appli qui permet de télécharger des fichiers sur le net suivant le protocole HTTP dont voici le code de la partie qui v Suppression de caractères d'un gros fichier texte [ par mslider ] --Bonjour, c'est juste pour une petite aide. J'ai utilisé un code qui avait été mis au point à l'origine pour faire du cross-table(tableau croisé, vo cryptage de cesar sur c++ [ par juniordiaw ] bjr a tous g un problemea vec mon code o faite lorske g rentre un letre il me la crypte mai sil sagi dun mo ou dune phrase il ne crypte ke la premiere char [10] dans char [16][10] [ par Stutu ] Bonjour à tous, Je m'explique j'ai un char buffer[10] que je voudrais mettre dans un char temp[16][10] car je vais devoir mettre 16 fois buffer[10] d probleme avec une chaine de caractere [ par joben22 ] Bonsoir, j'ai un petit soucis avec une fonction que j'essaie de coder. En fait, je lis le contenue d'un fichier, le place dans un char* et la j'aimer La mémoire ne peut pas être "written" [ par Nao13090 ] Bonjour à tous ! Dans le cadre de mon projet de gestion de tournoi, j'ai créer via Qt une fenêtre visant à éditer les participants ajoutés au préala fread & fwrite [ par mosted ] Bonjour, Etant débutant , j'ai un soucis avec un code à faire pour l'école. Nous devons lire des structures d'un fichier binaire. Voici mon code [c Probleme de Malloc sur un char ** [ par tomy46 ] Bonjour a tous, Avant tout, désole pour les accents (sauf ceux repris par la correction orthographique) mais je suis sur qwerty ... Bon voici mon pr lire un fichier sql pour mettre à jour une base access [ par sandrank ] bonjour,je débute en C et j'espère que quelqu'un va pouvoir m'aider :je dois mettre à jour une base de données access à partir d'un fichier sql de ce


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,226 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales