2013-07-30 91 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