Fehler wenn Runtime nicht als DLL benutzt wird
-
Hi,
wenn ich mit MS VS 2005 mein Projekt mit "Multi-threaded DLL (/MD)" (unter Configuration Properties/C/C++/Code Generation/Runtime Library) kompiliere, gibt es keine Probleme beim Ausführen.Wenn ich jetzt aber das Projekt mit "Multi-threaded (/MT)" kompiliere, läuft das Prog im Debug Modus zwar ohne Probleme, aber im Release Modus stürzt es ab.
Wenn ich dann (in dem Windows-Dialog "bla.exe hat ein Problem festgestellt..") auf Debug klicke, gibt er mir folgendes aus:
Unhandled exception at 0x7c94426d in bla.exe: 0xC0000005: Access violation reading location 0x00000000.Warum passiert das nur, wenn a) im Release Modus und b) mit der Option "Multi-threaded (/MT)" kompiliert wird und wie kann ich das Problem beheben??
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Sehr, sehr wahrscheinlich hast Du irgendeine Variable (auch Pointer) nicht initialisiert.
Im Debug Mode wird das von der IDE, bzw. dem Debugger gemacht.
Desshalb läuft es im Debugger, und im Release Mode crashts dann.
(Zumindest ist das bei VS ein Hauptproblem für das beschriebene Verhalten.)Gruss Simon
-
Hallo,
ich habe herausgefunden, dass der Fehler bei diesem Befehl verursacht wird:WCHAR *cTempStr; cTempStr = new WCHAR[50];
Mache ich da irgendetwas falsch?
-
Hallo,
an dem Befehl, den ich gepostet habe liegt es wohl doch nicht..Ich habe den ganzen Code nochmal durchgesehen, aber keine einzige Variable bzw. Pointer gefunden, die vor der Benutzung nicht initialisiert gewesen sein könnte.
Seltsam ist, dass das Prog nur manchmal abstürzt (richtig willkürlich..), aber nur, wenn die msvcr80.dll nicht benutzt wird..
Sehr, sehr wahrscheinlich hast Du irgendeine Variable (auch Pointer) nicht initialisiert.
Im Debug Mode wird das von der IDE, bzw. dem Debugger gemacht.Werden Variablen/Pointer auch im Release Modus, wenn man das Prog von der IDE aus startet, automatisch initialisiert?
-
dann bau doch dein Release mit Symbolen und schaue, wo es knallt. Wenn es mit DLL geht und mit Lib nicht, dann liegt es meistens daran, dass du eine DLL verwendest / schreibst und diese mit statisch gelinkter Runtime einen eigenen Heap hat und wenn dann ein Pointer nach Außen gegeben wird und in einem anderen Modul versucht wird, den Speicher hinter diesem Pointer freizugeben, dann kracht es (weil die Module verschiedene Heaps haben), gilt andersrum genauso. Statisch und dynamisch darf man in einem Prozess nur dann mischen, wenn man ganz genau weiß, was man tut.
-
...weil die Module verschiedene Heaps haben...
Oha.. Wusste ich bisher nicht..
Nachdem ich jetzt einige Codestellen verändert habe, tritt der Fehler nicht mehr auf.. Könnte aber sein, dass das nur Zufall ist..