当我在整数上声明一个指针时,我的程序运行正常。 但是如果我声明另一个指针,我的程序执行时会出错。
为什么?
我使用VC ++ 11;
示例代码:
int main()
{
int *p_first;
int *p_seconds;
*p_first = 5;
*p_seconds = 6;
return 0;
}
答案 0 :(得分:3)
你需要让指针指向你可以写入的内存。您正在取消引用未初始化的指针,这是未定义的行为。你的第一个版本可能“工作正常”,但它仍然被打破,无法依赖它。
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;
答案 1 :(得分:1)
您正在取消引用未初始化的指针。这是undefined behavior。这是第一次,因为你很幸运。
答案 2 :(得分:1)
因为它可以随意做任何事情 - 你的程序有未定义的行为,因为你取消引用未初始化的指针。
答案 3 :(得分:1)
写作时
int a = 3;
在内存中,您正在创建一个空格,称之为a
,并为其指定3
的值。
写作时
int* b = new int(3);
您正在创建一个空格b
,指向新分配了值3
的空间。
答案 4 :(得分:0)
请注意,您正在尝试取消引用未初始化的指针 ,从而导致未定义的行为。试试这样:
int *p_first;
int x = 5;
p_first = &x;