当我在整数上声明一个指针时,我的程序工作正常。但是如果我声明另一个指针,我的程序执行时会出错。
为什么?
我使用 VC++ 11;
示例代码:
int main()
{
int *p_first;
int *p_seconds;
*p_first = 5;
*p_seconds = 6;
return 0;
}
当我在整数上声明一个指针时,我的程序工作正常。但是如果我声明另一个指针,我的程序执行时会出错。
为什么?
我使用 VC++ 11;
示例代码:
int main()
{
int *p_first;
int *p_seconds;
*p_first = 5;
*p_seconds = 6;
return 0;
}
你需要让你的指针指向一些你可以写入的内存。您正在取消引用未初始化的指针,这是未定义的行为。您的第一个版本可能“运行良好”,但它仍然损坏,不能依赖它来工作。
int* p_first; // uninitialized pointer.
int i = 41; //
p_first = &i; // p_first now points to location of i
*p_first = 5; // OK
p_first = new int(); // p_first points to dynamically allocated int
*p_first = 5; // OK
delete p_first;
您正在取消引用未初始化的指针。这是未定义的行为。第一次成功是因为你很幸运。
因为它可以随心所欲地做任何事情 - 因为您取消引用未初始化的指针,所以您的程序具有未定义的行为。
当你写
int a = 3;
在内存中,您正在创建一个空间,调用它a
,并为其赋值3
。
当你写
int* b = new int(3);
您正在创建一个空间,该空间b
指向一个新创建的空间,该空间3
被分配了值。
请注意,您正在尝试取消引用导致未定义行为的未初始化指针。试试这样:
int *p_first;
int x = 5;
p_first = &x;