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 verworfen

    mein 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.


Log in to reply