2013-11-22 182 views
0

我有一個運行良好的調試版本的程序,但是當我在下面線運行相同與發佈構建我的程序崩潰問題在Visual Studio 2012發佈版本

char* iter=ptr; //ptr is already initialized 

char* iter = (char*) ALIGN (iter); // crashes here 

我有類似下面的預處理器定義對於ALIGN

類型轉換長指針。

#define SIZE  8L 
#define ALIGN(ptr) \ 
    (((__int64)ptr & (~(SIZE - 1L))) + SIZE) \ 

     : (__int64)ptr) 

,當我在Visual Studio 2012在Windows 8中運行這個程序,它只是提供了問題,但工作正常使用Windows 7中的Visual Studio 2012。 我不知道我們必須設置或取消設置我的程序在發佈模式下工作的標誌(可能是優化標誌)。
請建議我一個解決方案

回答

5

你在做什麼,基本上

char* iter = iter; 

如果變量iter被聲明爲一個局部變量,它的內容將是不確定的,並且使用該值將導致未定義的行爲。這包括使用該值來初始化它自己。

+0

嘿,我的道歉,其實我要增加一行。當它崩潰時,會出現「訪問衝突寫入位置」之類的錯誤。其實這個程序在vc9和vc10發佈模式下工作正常,但我不知道爲什麼它在Windows 8的vc11發佈模式下失敗。 –

+0

@ user3021329因爲未定義的行爲。 –