[C] Über Adresse Variablennamen herausfinden

mc_gulasch

Erfahrenes Mitglied
Moin,

ich kämpf gerade mit einem wunderbaren Debug Assertion Fehler rum und dabei schmeisst es ihn bei
C:
/*
         * If this ASSERT fails, a bad pointer has been passed in. It may be
         * totally bogus, or it may have been allocated from another heap.
         * The pointer MUST come from the 'local' heap.
         */
        _ASSERTE(_CrtIsValidHeapPointer(pUserData));
in der dbgheap.c. In meinem Programm ist das bei einer free-Anweisung. Merkwürdigerweise setzte ich alle vorher freigegebenen dyn. Variablen nach dem free() auf '0', aber der Pointer, der angeblich falsch übergeben wird, hat eine Adresse.
Jetzt wollte ich wissen, ob jemand weiß, ob es möglich ist mit MSVC++ über die Adresse die zugehörige Variable rauszufinden (also welche Variable im Laufe des Programms auf diese Adresse zugreift).
Weiß da wer was?

Danke sagt das Gulasch
 
1. Du kannst den Compiler eine Map-Datei generieren lassen. Da stehen dann u.A. alle Adressen und Größen aller Objekte (Variablen und Funktionen) drin. So kannst Du die Adresse einer Variablen herausfinden (oder umgekehrt).

2. Wenn Du einen Debugger verwendest, dann sollte der einen sogenannten Call-Stack haben. Das ist eine Liste, in der steht von welcher Funktion die aktuelle Funktion aufgerufen wurde. In meinem VS.NET 2003 ist das unter Debug->Fenster->Aufrufliste. Damit kannst Du dann herausfinden, in welcher Funktion auf welchen ungültigen Zeiger zugegriffen wurde.
 
Zurück