Heap-Beschädigung bei der Rückgabe aus der Funktion innerhalb einer dll

Habe ich eine Funktion mit einem Prototyp wie folgt:

void function(std::string str);

Diese Funktion in meiner main-Funktion in ein anderes Programm geladen und verwendet diese dll.

function("some string value here");

Bei der Rückkehr von dieser Funktion habe ich bekommen heap corruption Fehler:

Windows hat einen Haltepunkt ausgelöst program.exe.

Dies kann durch eine Korruption des heap-gibt einen bug in
Programm.exe oder eine der DLLs geladen sind.

Diese können auch durch den Benutzer durch das drücken von F12 während
Programm.exe-Datei, die den Fokus hat.

Dem Ausgabe-Fenster kann mehr diagnostische Informationen.

Herumspielen mit meinem code, den ich bemerkte ein paar seltsame Beobachtungen:

1. Wenn die Länge des übergebenen Strings in weniger als 11 Zeichen ich bekomme keine Fehler, sobald ich mehr Zeichen, die die Fehlermeldung angezeigt wird.

2. Wenn die änderung der Art der parameter von std::string zu std::string& der Fehler verschwindet. Die Idee der Verweis kam von hier.

3. Hab ich auskommentiert, die Körper der Funktion. Die Vorgänge dort haben nichts zu tun mit der Ausnahme hergestellt.

4. Ändern des Parameters type aus std::string zu char* auch das problem löst.

Was könnte die Ursache dieses Fehlers? Wie kann ich es lösen?

  • Ich erinnere mich gelesen zu haben, dass der Speicher Zuweisung über die DLL-Grenze, kann schwierig sein - wahrscheinlich am besten, um das Update verwenden Sie disovered, d.h. übergeben Sie einen Verweis.
  • Ist die dll und das Programm zusammengestellt mit der gleichen version von std c++ - Bibliotheken? Sowohl Ihr Programm & dll-Versionen oder sind Sie beide debug - Versionen-also einer von Ihnen ist nicht eine andere Art als die anderen?
  • Die dll ist eigentlich ein anderes Projekt in meiner Projektmappe (VS 2008). Recht nicht ich bin mit beiden debug-Versionen.
  • siehe stackoverflow.com/q/1344126/492336
InformationsquelleAutor atoMerz | 2012-12-03
Schreibe einen Kommentar