0

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

为什么?

我使用 VC++ 11;

示例代码:

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

    *p_first = 5;
    *p_seconds = 6;

    return 0;
}
4

5 回答 5

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;
于 2013-07-28T17:36:06.680 回答
1

您正在取消引用未初始化的指针。这是未定义的行为。第一次成功是因为你很幸运。

于 2013-07-28T17:36:13.267 回答
1

因为它可以随心所欲地做任何事情 - 因为您取消引用未初始化的指针,所以您的程序具有未定义的行为。

于 2013-07-28T17:36:36.810 回答
1

当你写

int a = 3;

在内存中,您正在创建一个空间,调用它a,并为其赋值3

在此处输入图像描述

当你写

int* b = new int(3);

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

在此处输入图像描述

于 2013-07-28T17:41:07.720 回答
0

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

int *p_first;
int x = 5;
p_first = &x;
于 2013-07-28T17:37:58.000 回答