Debuggage C++ : comment traquer un heap corruption random sous Windows ?

Python, JavaScript, C, PHP, algorithmes, IDE
toto_tech
Messages : 365
Inscription : ven. avr. 17, 2026 7:24 pm

Debuggage C++ : comment traquer un heap corruption random sous Windows ?

Message par toto_tech »

Aidez-moi, je suis en train de devenir fou ! Mon appli C++ (compilée avec VS2022) crash aléatoirement avec un heap corruption. J'ai essayé PageHeap, CRT debug, mais le crash se produit dans n'importe quelle allocation. Des techniques avancées pour tracer ça ?
Sauvegardez, bon sang
max1965
Messages : 247
Inscription : mer. mai 08, 2024 7:24 pm

Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?

Message par max1965 »

Les heap corruptions... le pire ! As-tu essayé Application Verifier ? Active tous les checks sauf ceux qui ralentissent trop. Et surtout, regarde les allocations juste AVANT le crash, pas forcément celle qui échoue.
Full AMD, full silence
yanis1964
Messages : 300
Inscription : dim. sept. 03, 2023 7:24 pm

Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?

Message par yanis1964 »

J'ai eu un cas similaire l'an dernier qui venait d'un std::string mal copié dans un callback multithread. Depuis, j'utilise systématiquement AddressSanitizer (même sous Windows, avec clang-cl). Ça a trouvé 3 corruptions que les outils MS ne voyaient pas.
guillaume
Messages : 267
Inscription : lun. mars 16, 2026 7:24 pm

Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?

Message par guillaume »

Un conseil qui m'a sauvé la vie : dump mémoire au moment du crash (procdump -ma) et analyse offline avec WinDbg. Souvent la corruption est visible dans les patterns d'allocations. Et vérifie tes pointeurs partagés, c'est souvent là que ça merde.
toto_tech
Messages : 365
Inscription : ven. avr. 17, 2026 7:24 pm

Re: Debuggage C++ : comment traquer un heap corruption random sous Windows ?

Message par toto_tech »

Merci à tous ! J'ai lancé Application Verifier + AddressSanitizer (merci @201 pour l'astuce clang-cl). Bingo : c'était un double delete dans un shared_ptr custom qui n'était pas thread-safe. Vous êtes des sauveurs !
Sauvegardez, bon sang
Répondre