Speicherproblem in DLL



  • Hallo,

    habe ein kleines Problem: Habe ein Plugin für Winamp geschrieben (DLL) und bekomme irgendwann Probleme mit dem Speicher (realloc liefert NULL).

    Nun einige Fragen:

    1. Läuft jede DLL in einem eigenen Speicherbereich oder ist das unterschiedlich (bzw. liegt es an meinem Code oder kann Winamp / ein anderes Plugin diesen
    Fehler hervorrufen).

    2. Falls nicht, kann ich dies irgendwie erzwingen?

    3. Habt ihr einige Tips, wie ich das am besten debuggen kann (bzw. rausfinden kann, ob es an meinem Code liegt oder nicht).

    4. Habe eine Funktion safe_realloc geschrieben, die eine Exception wirft. Gibt es in c++ Funktionen, den Call Stack dynamisch abzufragen (also rausfinden, woher der Aufruf gerade kam) ?

    Der Fehler kann recht gut reproduziert werden, allerdings kann ich den Code während der Initialisierung der DLL laufen lassen und der Fehler tritt nicht auf (es handelt sich im Prinzip um eine Datei, die in einen wchar_t* Speicherbereich eingelesen wird - bei der Initialisierung hab ich die fragliche Datei in einer Schleife 10000 mal eingelesen ohne Probleme - während 'später' der Fehler auftritt - und es handelt sich nicht um eine konstante Datei - sie muss 'später' eingelesen werden).

    Gruß, Christian



  • 1. nein
    2. nein
    3. nö was macht dein code so
    4. kann nur c
    wenn realloc NULL zurückgibt musste schon derbe was falsch machen aber irgendne geschichte gibts bei dlls auch die man beachten muss wenn sie ne andere crt, hab aber die details jetzt vergessen, musste mal msdn gucken ob das damit zu tun haben kann.



  • Danke erstmal,

    hab den Fehler mittlerweile wohl gefunden. War an einer anderen Stelle - aber eher Glück gehabt - würde in Zukunft gerne systematischer an die Sache rangehen können (memory corruption debuggen). Denke nämlich, dass sich noch ein paar Fehler verbergen (ca. 2 Jahre nicht mehr in C++ programmiert und jetzt das Projekt zwangsweise aktualisiert).

    Weiss nicht, ob das nur für DLLs gilt, aber wenn ich die Runtime-Library von Debug auf Release stelle, ist es (zumindest früher) sofort abgestürzt (hatte wohl irgendwas mit memory alignment/boundaries zu tun) - eventuell meinst du das?

    Gruß, Christian


  • Mod

    Ich würde sagen, dass Dein Programm den Heap zerstört. Und das muss nicht an der Stelle passieren, an der Du es erwartest.
    Bei Deine DLL mit Debug Infos in der Releaseversion und teste das Programm.

    Wenn Dein Programm in der Release Version sosofrt abschmiert kann es gut etwas mit dem eben nicht initialslierten Speicher zusammenhängen, der in der Debug Version auf konstante Werte initialisiert wird, nicht jedoch in der Release Version.


Anmelden zum Antworten