在整数上声明两个指针(VS2012)

时间:2013-07-28 17:34:43

标签: c++ visual-studio-2012

当我在整数上声明一个指针时,我的程序运行正常。 但是如果我声明另一个指针,我的程序执行时会出错。

为什么?

我使用VC ++ 11;

示例代码:

int main()
{
    int *p_first;
    int *p_seconds;

    *p_first = 5;
    *p_seconds = 6;

    return 0;
}

5 个答案:

答案 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的值。

enter image description here

写作时

int* b = new int(3);

您正在创建一个空格b ,指向新分配了值3的空间。

enter image description here

答案 4 :(得分:0)

请注意,您正在尝试取消引用未初始化的指针 ,从而导致未定义的行为。试试这样:

int *p_first;
int x = 5;
p_first = &x;