1. 程式人生 > >直接 Run 和 Debug 結果不一樣?

直接 Run 和 Debug 結果不一樣?

Debug時記憶體會初始化,但執行時不會直接 Run  Debug 的時候,可能程式初始化時的記憶體構造有些不一樣,所以導致不同的行為。

特別要注意變數的初始化問題,儘可能做到所有類的成員變數以及臨時變數的值都要賦初值!

我遇到過類似問題,一般說來是由於記憶體非法操作引起的。

我告訴你產生此類錯誤的一個例子,先看下面函式的原形:

strcpy(char *strDestination,const char *strSource);

引數  strDestination 目的字串

strSource   以空格結尾的源字串

說明

strcpy函式把strSource包括結尾的空格字元拷貝到strDestination

所指的位置。在字串被拷貝或新增時不執行上溢位檢測。如果源和目的字串重迭,strcpy的行為是不確定的。

-------------------------------------------------

這裡要注意的是:在呼叫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);