直接 Run 和 Debug 結果不一樣?
阿新 • • 發佈:2019-02-06
Debug時記憶體會初始化,但執行時不會。直接 Run 和 Debug 的時候,可能程式初始化時的記憶體構造有些不一樣,所以導致不同的行為。
特別要注意變數的初始化問題,儘可能做到所有類的成員變數以及臨時變數的值都要賦初值!
我遇到過類似問題,一般說來是由於記憶體非法操作引起的。
我告訴你產生此類錯誤的一個例子,先看下面函式的原形:
strcpy(char *strDestination,const char *strSource);
引數 strDestination 目的字串
strSource 以空格結尾的源字串
說明
strcpy函式把strSource包括結尾的空格字元拷貝到strDestination
-------------------------------------------------
這裡要注意的是:在呼叫strcpy函式之前,strSource的末尾必須為結束符號\0,
否則的話就會出現類似錯誤,debug時沒問題,執行出錯。
象下面這樣使用就不會出錯:
char* tempFile=new char[ftell(m_pFile)+1];//分配記憶體+1
Read(tempFile,ftell(m_pFile));//Read為使用指定的檔案控制代碼m_pFile,讀取指定數量字元的自定義函式
tempFile[ftell(m_pFile)]='\0';//加結束標誌,防止潛在錯誤的發生
strcpy(temp, tempFIle);
SAFE_DELETE(tempFile);