Absturtz in dem Releasemodus, Debugmodus läuft
-
Hallo,
habe da folgendes Problem: Wenn ich im Debugmodus mein Programm ausführe läuft es fehlerfrei. Führe ich es aber im Releasemodus aus stürzt mir das Programm in meiner Speichern-Routine ab. Bekomme da auch bei der Kompilierung folgende
Fehler:LINK : warning LNK4089: Alle Verweise auf "GDI32.dll" wurden durch /OPT:REF verworfen
LINK : warning LNK4089: Alle Verweise auf "WINSPOOL.DRV" wurden durch /OPT:REF verworfenmein Quellcode lautet folgenderassen:
BOOL CLVErrSimDlg::SaveLogFile() { int id = MessageBox("Möchten Sie diesen Test abspeichern (Ja) oder verwerfen (Nein) ?", "Logfile speichern", MB_ICONQUESTION | MB_YESNO); switch(id) { try { case IDYES: { // Temp-File öffnen und Daten auslesen CFile file; file.Open(m_strPathTempLogfile, CFile::modeNoTruncate | CFile::modeReadWrite); int length = file.GetLength(); TCHAR* pStrTmp = new TCHAR[length+1]; file.Read(pStrTmp, length); pStrTmp[length] = '\0'; file.Close(); // Neues Logfile erstellen falls noch nicht vorhanden CString strLog = m_strPathLog+"\\"+m_strDate+".log"; CStdioFile fileLog(strLog, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite); CString strSN = "keine"; // Kopzeile reinschreiben wenn die temporäre Datei leer ist if(fileLog.GetLength() == 0) { CString str; str = "Logfile vom "+m_strMonthText; fileLog.WriteString(str); str = "\n-----------------------------------------------------\n"; fileLog.WriteString(str); // Seriennummer ins Logfile eintragen falls vorhanden if(m_strDeviceNum.Compare(strSN) != 0) { CString strDevNum = "Geräte-Nr.: "+m_strDeviceNum; int iDevLength = strDevNum.GetLength(); fileLog.SeekToEnd(); fileLog.WriteString("\n"); // nächste Zeile fileLog.Write(strDevNum, iDevLength); fileLog.SeekToEnd(); } // Daten ins Logfile am Anfang schreiben fileLog.Write(pStrTmp, length); } else { // Seriennummer ins Logfile eintragen falls vorhanden if(m_strDeviceNum.Compare(strSN) != 0) { CString strDevNum = "Geräte-Nr.: "+m_strDeviceNum; int iDevLength = strDevNum.GetLength(); fileLog.SeekToEnd(); fileLog.WriteString("\n\n"); // nächste Zeile fileLog.Write(strDevNum, iDevLength); // Daten ins Logfile am Ende anfügen fileLog.SeekToEnd(); fileLog.Write(pStrTmp, length); } else { // Daten ins Logfile am Ende anfügen fileLog.SeekToEnd(); fileLog.WriteString("\n"); // nächste Zeile fileLog.Write(pStrTmp, length); } } // möglichen BCD-Anzeigefehler im Logfile dokumentieren if(m_dBCD_err == 17) { fileLog.SeekToEnd(); fileLog.WriteString("\n"); // nächste Zeile CString strErr = "Fehler an der Sub-D Buchse !!!"; length = strErr.GetLength(); fileLog.Write(strErr, length); } fileLog.Close(); // Temporäres Logfile löschen CFile tmpFile; tmpFile.Remove(m_strPathTempLogfile); CString buff; delete[] pStrTmp; } break; case IDNO: // temporäres Logfile löschen CFile tmpFile; tmpFile.Remove(m_strPathTempLogfile); CString buff; break; } catch(CFileException* err) { err->ReportError(); err->Delete(); } } return 1; }
weis jemand vieleicht woran das liegt ?
MfG
-
Schau mal in die FAQ.
Meist liegt es an nicht initialisierten Variablen.
-
Habe alle Variablen und Zeiger vorinitialisiert bis auf Klassenvariablen wie CString, CFile, CStdioFile etc.