在下面的代码中我发现相同的指针指令会在某种情况下使应用程序崩溃,而不是在其他情况下。
#include <iostream>
using namespace std;
int main()
{
int *p;
*p = 50; //this instruction causes the crash
int* q = new int;
*q = 50; //this instruction executes ok
cout << "p:" << p << endl;
cout << "q:" << q << endl;
return 0;
}
我想知道为什么会这样?
答案 0 :(得分:4)
第一个指针未初始化。它没有指向具有int值的内存位置。因此,当您在下一行中对其进行deref时,就会发生崩溃。
第二个指针初始化为一个在内存中有实际空间的int。因此,当你deref它时,它会找到该空间中保存的值。
答案 1 :(得分:2)
int *p;
该指针指向任何地方,即不在该进程的任何有效地址。这就是崩溃的原因
int* q = new int;
指向new int
返回的有效地址,因此有效
答案 2 :(得分:1)
我看到你需要一些指向文档的链接:
包装起来:
*
)返回指针指向的对象(取消引用指针)。&
)来获取对象的地址,以便将其分配给指针。new
运算符创建一个新对象并将地址返回给它以将其分配给指针。 delete
最终销毁使用new
创建的对象。进一步阅读: