livevlad
Messages postés8Date d'inscriptionvendredi 4 février 2011StatutMembreDernière intervention25 septembre 2012
-
15 août 2012 à 17:16
livevlad
Messages postés8Date d'inscriptionvendredi 4 février 2011StatutMembreDernière intervention25 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.
livevlad
Messages postés8Date d'inscriptionvendredi 4 février 2011StatutMembreDernière intervention25 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.
cptpingu
Messages postés3836Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention11 février 2023124 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/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
ed73
Messages postés276Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention15 avril 20132 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.
livevlad
Messages postés8Date d'inscriptionvendredi 4 février 2011StatutMembreDernière intervention25 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 ^^.