Trouver le sagouin qui écrit en dehors de sa mémoire allouée en C++

Résumé du problème : j’ai mon programme C++ sous Windows qui explose à la déallocation d’une wstring de la heap. Vu où et comment ça pète, ça sent la variable allouée dans une zone mémoire qui a été « corrompue » auparavant (genre un tableau qui a dépassé), et lors de la déallocation ça explose vu que ça ne ressemble pas à ce à quoi ça devrait ressembler.

Mon soucis c’est que je n’ai aucune idée de qui peut dépasser, et encore moins comment trouver le coupable. Je peux feinter pour que mon programme tourne en changeant un peu ma structure, mais ça ne résouts pas le soucis qu’un objet bave et que tôt ou tard ça va me repéter à la gueule.

J’ai essayé Dr Memory mais ça ne veut pas se lancer. Est-ce que certains ou certaines ici ont déjà utilisé des logiciels comme PurifyPlus, Insure++ ou BoundsChecker ? Est-ce que ça pourrait m’aider dans ma quête ?

J’ai essayé aussi le Heap Profiling de VisualStudio mais ça ne m’aide pas beaucoup…

Sinon ça serait quoi vos pistes pour trouver le soucis ?

1 « J'aime »

https://social.msdn.microsoft.com/Forums/en-US/adf8f801-a7fa-482e-9167-219b4628f07d/enableactive-debug-heap-allocation-in-code-c-when-application-start
Ca c’est bien pour trouver les trucs comme ca (en le mettant a 0 du coup).
Sinon, app verifier est bien aussi.
Sinon, un custom allocator, qui trace toute les allocs.
Ou un asan, mais c’est penible a utiliser.

2 « J'aime »

Je regarde tout ça, merci !

Tu vas ptet pleurer un peu, vu que tout ces outils sont assez verbeux, vont te sortir 12000 problemes autres, et ptet pas le tien.

Mais des vrais problèmes quand meme souvent :smiley: c’est comme les warnings ca, ca vaut le coup de faire le menage souvent et agressivement parce que au final sinon tu trouves jamais ce que tu veux dans le bordel…

3 « J'aime »

Ha clairement, juste ya pas mal de soucis dans AppVerifier qui sont quand meme infixable ou imbittable.

Ce sujet a été automatiquement fermé après 730 jours. Aucune réponse n’est permise dorénavant.