Windows has triggered a breakpoint in Anwendung.exe



  • Hallo,

    ich habe folgende Fehlermeldung bekommen und kann mir einfach keinen Reim darauf machen wo diese herkommt.

    VS2005 stürtzt an folgender Stelle der Datei xstring ab

    void __CLR_OR_THIS_CALL _Eos(size_type _Newsize)
    		{	// set new length and null terminator
    		_Traits::assign(_Myptr()[_Mysize = _Newsize], _Elem()); //HIER
    		}
    

    HEAP[Anwendung.exe]: Invalid Address specified to RtlValidateHeap( 003D0000, 00382C88 )
    Windows has triggered a breakpoint in Anwendung.exe.

    This may be due to a corruption of the heap, and indicates a bug in Anwendung.exe or any of the DLLs it has loaded.

    The output window may have more diagnostic information

    Ich binde zum Projekt Anwendung die statische lib Functions hinzu. Innerhalb dieser wird eine dll dazugeladen (loadlibrary), welche wiederum die lib Functions beinhaltet. Der Aufruf der Funktionen aus dieser DLL funktioniert noch einwandfrei, aber danach kommt eben obige Fehlermeldung.

    Kann dies mit Compilereinstellungen zu tun haben? Ich linke die Runtime Libraries statisch hinzu.

    Danke.



  • Du hast irgendwo ein Speicher-Überschreiber... vermutlich wegen einer falschen Aufrufkonvention...



  • Hallo,

    es muss an den Compilereinstellungen liegen, weil die Projektmappe wurde von mir umgebaut und danach kam das mit dem Fehler.

    Vorher sah die Mappe wie folgt aus:
    -Projekt Anwendung (eine normale Konsolenanwendung, Multi-threaded DLL (/MD), verwendet die Funktionen der HaupLib)

    -Projekt Auto (eine statische lib, vorkomp. Header, Multi-threaded DLL (/MD), hier nur eine abstrakte Basisklasse enthalten)

    -Projekt HauptLib ((eine statische lib, vorkomp. Header, Multi-threaded DLL (/MD), diese wird zum Projekt Anwendung dazugebunden, arbeitet mit den Datentypen aus Projekt Auto. Über LoadLibrary wird die Klasse Spezielles Auto letztlich verwendet)

    -Projekt SpeziellesAuto(eine DLL, vorkomp. Header, Multi-threaded DLL (/MD), implementiert die virtuellen Funktionen der Klasse Auto.

    Hier funktionierte noch alles.

    Jetzt will ich die ganzen Libraries, in den lediglich Basisklassen implementiert sind eben auch alle in die HauptLib reinhaben, damit ich eben zur Anwendung diese HauptLib dazubinde und fertig, soll letztlich ja auch auf einen Rechner ohne VS2005 laufen.
    Darum habe ich eben die jeweiligen Header und CPP in den Ordner der HauptLib kopiert, dort zum Projekt hinzugefügt. Das Projekt Auto habe ich aus der Mappe entfernt. Nun habe ich überall noch die Runtime Library bei jedem Projekt auf Multi-threaded Debug (/MTd) gestellt (egal ob es lib oder dll oder Anwendung ist). Dann habe ich noch bei der SpeziellesAuto.dll die HauptLib dazugebunden, damit eben die Basisklassenfunktionen verwendet werden können.

    Jetzt kommt ebend er oben genannte Fehler.

    Bin für jede Hilfe dankbar. Es ist eine Kleinigkeit und ich hab schon wild herumprobiert und bei Google gesucht, aber ich finde irgendwie keine Lösung.

    Danke.



  • Wenn Zeiger über Modulgrenzen hinweg erzeugt und zerstört werden musst Du die DLL Version der CRT verwenden. /MTd verwendet die statisch gelinkte CRT.

    Das Problem ist entsprechend hausgemacht. Und es ist giut dokumentiert:
    http://msdn.microsoft.com/en-us/library/ms235460.aspx

    Zitat aus http://msdn.microsoft.com/en-us/library/abx4dbyh(VS.80).aspx

    Because a DLL built by linking to a static CRT will have its own CRT state, it is not recommended to link statically to the CRT in a DLL unless the consequences of this are specifically desired and understood.

    🙂

    Grundsätzlich würdeich niemals Objekte über DLL Grenzen austausachen schon gar keine STL Objekte. Denn das geht nur wenn die gleiche Compilerversion und Code-Basis verwendet wird und auch nur mit der DLL Version der CRT.


Anmelden zum Antworten