指针没有修改地址?

时间:2015-10-02 12:25:34

标签: c++ pointers reference crash

我正在编写一个C ++程序来测试我的指针和参考知识,因此抓住了一个地址,我无法修改它中的值0; 知道为什么会这样吗?我将这条线命名为"越野车线"

#include <iostream>

using namespace std;

int main()
{
    int value = 6;
    int* point = &value;
    int value2 = 9000;
    *point = 5;
    point = &value2;
    point+=4000;
    *point = 0;  //the buggy line
    cout << *point << endl;
    cout << value;
}

3 个答案:

答案 0 :(得分:1)

pointint*,所以在此行之后

point+=4000;

您现在指的是4000 int个地址超过value2。你不能尝试写入那个地址,因为你没有分配它。

答案 1 :(得分:1)

*point = 0;  //the buggy line

不,这不是马车线。

point+=4000;

这是越野车线。此语句将指针值提前4000 * sizeof(int)。

这显然不是你想要的。

你在这里忘记了一个星号。

答案 2 :(得分:0)

point+=4000;
*point = 0;  //the buggy line

这两行将指针移动4000个字节并尝试在那里写入。这是不允许的,因为您不拥有指针现在指向的内存(或者实际上存在更严格的规则)。因此,具有该内存的任何操作都可能会产生不同的意外结果,包括崩溃。

请注意,我说&#34;可以有#34;而不是&#34;必须有&#34;。这就是所谓的Undefined behavior:写入可以成功,可以工作,但写入不同的值,可以现在或以后崩溃您的程序,可以格式化您的驱动器等。它甚至可以读取成功,但写才不是。该语言无法保证具体结果。

事实上,在大多数实现和典型情况下,只要你不走远,它似乎会起作用(尽管可能会覆盖其他重要数据),但是当你走得更远时,它会使你的程序崩溃。 / p>