Problem bei Release-Version



  • Hallo,
    ich hab mir ein kleines Programm geschrieben und wollte nun eine Release Version davon erstellen. Hat auch geklappt, allerdings läuft sie nicht. Beim Starten kommt der Visual Studio Debugger mit einer "Unbehandelten Win32-Ausnahme". Genauer gesagt "Zugriffsverletzung beim Lesen an Position 0x00d4d31c."
    Ausserdem zeigt er mit den disassemblierten Code an der Position, wo der Fehler aufkommt, womit ich aber nicht viel anfangen kann.

    Ich weiss nicht welche Stelle vom Programm jetzt "schuld" ist, deswegen kann ich keinen Auszug aus dem Programm posten und das ganze Programm zu posten wäre wohl bisschen viel.

    Deswegen wollt ich fragen wo der Unterschied im Allgemeinen zwischen Debug und Release Version besteht und welche Probleme es geben könnte.

    mfg Nicoteen


  • Mod



  • Die Aufrufliste (hoffe das ist der callstack) sagt mir auch nicht viel.

    Quatris.exe!0040195f()
    [Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für Quatris.exe]
    Quatris.exe!004018a6()
    ntdll.dll!7c91eadc()
    ntdll.dll!7c926b17()
    ntdll.dll!7c9213e1()
    ntdll.dll!7c920041()
    ntdll.dll!7c921452()
    ntdll.dll!7c922d78()
    msvcr90.dll!78585f1a()
    ntdll.dll!7c91d80a()
    ntdll.dll!7c923416()
    msvcr90.dll!785435eb()
    msvcr90.dll!7858ca15()
    msvcr90.dll!78542e2b()
    msvcr90.dll!785421e7()
    msvcr90.dll!7858cb15()
    Quatris.exe!00402142()
    Quatris.exe!004021c8()
    Quatris.exe!004027a5()
    Quatris.exe!0040283a()
    Quatris.exe!00401e2e()
    kernel32.dll!7c817077()

    Die Debug version ist mit _NO_DEBUG_HEAP Umgebungsvariable immernoch ausführbar.



  • Ich hätte jetzt spontan (mehr oder weniger) auf folgenden Code getippt:

    string* MyStr;
    if (MyStr != NULL)
      MyStr->clear();
    

    Grund: Glaube, dass in der Debug Version Variablen (bzw. halt der Speicher) mit 0 gefüllt werden (in diesem Fall der Zeiger MyStr, so dass dieser NULL ist).
    In der Release Version findet das nicht mehr statt.

    Nur so als Idee, hatte ich mal in Zusammenhang mit einem CRect Objekt.



  • Ich habs gefunden. Der Debugger hat in der Tat alle Arrays mit einem bestimmten Wert, der kleiner als 0 ist gefüllt. Im Release scheint es anders gefüllt zu sein, weswegen eine Abfrage der Elemente des arrays auf größer 0 auf einmal seltsame Ergebnisse liefert.
    Habe jetzt im Konstruktor der Klasse mit zwei verschachtelten For-Schleifen alle Elemente des Arrays auf 0 gesetzt. Das kommt mir aber so umständlich vor. Geht das vielleicht noch irgendwie schöner?



  • Schau dir mal memset an


Anmelden zum Antworten