2010-04-15 2 views
1

Je me suis trompé avec ça toute la journée et je n'ai rien trouvé, donc j'espère que quelqu'un peut m'aider - J'ai une méthode HeapReAlloc qui échoue avec l'erreur ACCESS_VIOLATION, mais je ne sais pas comment l'implémenter une vérification supplémentaire en utilisant GetExceptionCode car il utilise try/catch ou exception ou quelque chose - quelqu'un peut-il me donner un exemple rapide de la façon dont je peux l'utiliser pour affiner cet échec, s'il vous plaît?Débogage Échec de HeapReAlloc en utilisant GetExceptionCode

Merci beaucoup, Becky

Répondre

0

Sont HeapReAlloc de hHeap et lpMem valide? Quelle valeur passez-vous pour dwFlags? Avez-vous obtenu hHeap via HeapCreate ou GetProcessHeap? Quels paramètres avez-vous fournis à HeapCreate/GetProcessHeap?

+0

hHeap est valide, dépassant HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY pour dwFlags, et lpMem est valide lorsque j'utilise HeapValidate juste avant l'appel de la fonction HeapReAlloc. –

+0

J'utilise HeapCreate avec les paramètres HEAP_GENERATE_EXCEPTIONS, 100000,0 –

+0

@Becky, en plus de 'HeapValidate (hHeap, 0, lpMem)' pouvez-vous * aussi * appeler 'HeapValidate (hHeap, 0, NULL)' pour valider le tas entier ? – vladr

1

Vous ne parvenez pas à résoudre le bon problème. HeapRealloc() bombarde parce que le tas est corrompu. Cela s'est passé il y a un certain temps, une déclaration dans votre programme débordant d'un bloc tas, écrit des données dans la mémoire qui a été libérée, quelque chose comme ça. MSVC dispose d'un allocateur de mémoire de débogage pour vous aider à résoudre ces types de problèmes, consultez la bibliothèque MSDN pour <crtdbg.h>.

Questions connexes