Probleme desallocation INEXPLICABLE

Résolu
livevlad Messages postés 8 Date d'inscription vendredi 4 février 2011 Statut Membre Dernière intervention 25 septembre 2012 - 15 août 2012 à 17:16
livevlad Messages postés 8 Date d'inscription vendredi 4 février 2011 Statut Membre Dernière intervention 25 septembre 2012 - 20 août 2012 à 14:37
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.

4 réponses

livevlad Messages postés 8 Date d'inscription vendredi 4 février 2011 Statut Membre Dernière intervention 25 septembre 2012
20 août 2012 à 14:37
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.
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
16 août 2012 à 01:42
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
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
16 août 2012 à 09:15
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.
0
livevlad Messages postés 8 Date d'inscription vendredi 4 février 2011 Statut Membre Dernière intervention 25 septembre 2012
20 août 2012 à 12:53
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 ^^.
0
Rejoignez-nous