2013-07-30 88 views
0

我試圖訪問未初始化的內存例外的含義,什麼是在Visual Studio的C++代碼

int *ptr; 

// to this and that 

*ptr = 8; 
return 0; 

我得到異常以下,

在sam2.exe 0x0041145e

未處理的異常:0000005 : 訪問衝突寫入位置0xcccccccc。

現在我知道0xcccccccc是在Visual C++中用於未初始化指針的值。但我不明白0x0041145e0xC0000005的含義。

只是爲了澄清,我問這個問題,因爲我想在YouTube上製作視頻教程幻數

我感謝您的幫助。 謝謝。

+0

0x0041145e是異常對象位置。 – billz

+0

'0xC0000005'是'Access violation'的異常代碼。 –

+0

@Dayalrai當我看到錯誤代碼時,它沒有被定義爲錯誤號。我錯了嗎? –

回答

3

0xC0000005是訪問衝突錯誤代碼。這種帶指針的非法操作會導致訪問衝突,因此會看到這段代碼。另一方面,0x0041145e不是一個神奇的數字,它是可執行文件中違規指令的位置,對於執行相同操作的其他程序將會有所不同。

0

這是使用指針的錯誤方法。 int * ptr; 上面的行告訴你,ptr保存一個指針地址。默認情況下,存儲的地址是一些垃圾,具體取決於編譯器,通過得到的錯誤可以安全地假設地址是0xcccccccc

0x0041145e,是正在執行的指令的地址,或者是這個指令的地址是堆棧頂部的指令。

所以你的代碼沒有執行。請修改這樣的代碼。
int * ptr =(int *)malloc(sizeof(int));
* ptr = 8;
return 0;

+1

「..堆棧指針地址(您正在執行的指令的地址)」 - 否。 (E)IP是引發錯誤的指令的地址。堆棧位於其他地方,與此無關。 – usr2564301

+0

+1。但我認爲sicietyCoding意味着同樣的事情,但沒有正確表達。 –

+0

@Jongware,它不是堆棧指針地址,它是當前正在執行的指令的地址。 – societyCoding