未修改地址的指针

Pointer not modifying the address?

本文关键字:指针 地址 未修改      更新时间:2023-10-16

我正在编写一个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;
}

pointint*,所以在这行之后

point+=4000;

您现在指向的4000 int地址超过了value2。您无法尝试写入该地址,因为您没有分配它。

*point = 0;  //the buggy line

不,这不是马车线。

point+=4000;

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

这显然不是你想要的。

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

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

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

请注意,我说的是"可以拥有",而不是"必须拥有"。这就是所谓的未定义行为:写入可以成功,可以工作,但写入不同的值,可以立即或稍后使程序崩溃,可以格式化驱动器,等等。甚至可以是读取成功,但写入不成功。语言无法保证具体结果。

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