Probleme desallocation INEXPLICABLE

[Résolu]
Signaler
Messages postés
8
Date d'inscription
vendredi 4 février 2011
Statut
Membre
Dernière intervention
25 septembre 2012
-
Messages postés
8
Date d'inscription
vendredi 4 février 2011
Statut
Membre
Dernière intervention
25 septembre 2012
-
Bonjour a tous!!

Alors je vais vous présenter un problème bien handicapant et surtout INEXPLICABLE.
Voici un extrait de code démontrant le problème:

Log("%d",attLen +1); // affiche en lancement "7"
attribute = new char[attLen+1];
if(!attribute)
{
Log("ZUT"); // ne s'affiche pas donc allocation réussie
}
Log("allocation"); // s'affiche
delete [] attribute; // PLANTE ICI
Log("deleted"); // ne s'affiche pas

Alors pourquoi inexplicable et bien si je teste le même programme avec attLen = 9 (donc new char[10]), çà marche.

Pourquoi uniquement certaines valeurs font échouer le delete????
je touche au C++ depuis un bon bout de temps mais alors là je ne vois pas.

Si quelqu'un a une idée qu'il l'a dise je suis preneur.

Merci en avance.
A voir également:

4 réponses

Messages postés
8
Date d'inscription
vendredi 4 février 2011
Statut
Membre
Dernière intervention
25 septembre 2012

Bon j'ai optimiser toute la fonction en conservant le char* (non un string) et la le problème n'apparaît plus. Je ne connaît donc pas la provenance de cette erreur.

Merci à ceux qui ont essayer de m'aider.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Bonjour.

Faire du new char[] alors qu'il y a les std::string (ou les std::vector<char>, voir encore mieux std::array<char> en C++0x) déjà, c'est étrange...
Mais pour répondre à la question, je ne vois pas d'erreur dans le code. Difficile à dire avec aussi peu d'information. Par exemple, dans un contexte multi-threadé, une mauvaise réentrance pourrait tout à fait provoquer cela.

Le mieux, serait que tu fasses un mini exemple, autonomone et compilable qui met en avant ce problème. Je pourrais ainsi le tester.
(Mais en C++, tu peux "delete[]" une zone mémoire qui a été allouée avec "new var[]", sans aucun problème, ce qui me fait dire que c'est effet secondaire d'autre chose.)

Je t'invite aussi à passer ton code dans un debuggeur (gdb) et un vérificateur de mémoire (valgrind, unix seulement).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Bonjour,

Il est peut-être possible que ta fonction Log aille empiéter sur la mémoire allouée pour ton tableau de char. Essaye de ne pas utiliser cette fonction pour voir.
Messages postés
8
Date d'inscription
vendredi 4 février 2011
Statut
Membre
Dernière intervention
25 septembre 2012

La fonction Log est in printf en gros et ne touche pas a la mémoire.

Je pense passer sur du String malgré tout pour contourner ce problème.
J'utilisais du char* juste pour m’entraîner avec le très bas niveau rien de plus afin de parfaire ma maîtrise de la gestion de mémoire rien de plus.

Je vous remercie quand même pour votre aide, je vais continuer à me renseigner et je posterai la réponse si tout de fois je la trouve ^^.