指针不修改地址?
Pointer not modifying the address?
我正在编写一个 C++ 程序来测试我的指针和引用知识,因此抓取了一个地址,但我无法修改其中的值 0;
知道为什么会这样吗?我将该行命名为 "buggy line"
#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;
}
point
是一个 int*
,所以在这一行之后
point+=4000;
您现在指向 4000
int
个地址过去 value2
。您不能尝试写入该地址,因为您没有分配它。
*point = 0; //the buggy line
不,这不是越野车线。
point+=4000;
这是越野车路线。此语句将指针值增加 4000*sizeof(int).
这显然不是你想要的。
你在这里忘记了一个星号。
point+=4000;
*point = 0; //the buggy line
这两行将指针移动 4000 字节并尝试在那里写入。这是不允许的,因为您不拥有指针现在指向的内存(或者实际上有更严格的规则)。因此,对该内存的任何操作都可能产生不同的意外结果,包括崩溃。
请注意,我说的是 "can have",而不是 "must have"。这就是所谓的Undefined behavior:写入可以成功,可以工作,但写入不同的值,现在或以后可以让你的程序崩溃,可以格式化你的驱动器等。甚至可以是读取成功,但写入才不是。语言不保证具体结果。
事实上,在大多数实现和典型情况下,只要你不走得太远,它似乎都能工作(尽管可能会覆盖其他重要数据),但当你走得更远时,它会使你的程序崩溃.
我正在编写一个 C++ 程序来测试我的指针和引用知识,因此抓取了一个地址,但我无法修改其中的值 0; 知道为什么会这样吗?我将该行命名为 "buggy line"
#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;
}
point
是一个 int*
,所以在这一行之后
point+=4000;
您现在指向 4000
int
个地址过去 value2
。您不能尝试写入该地址,因为您没有分配它。
*point = 0; //the buggy line
不,这不是越野车线。
point+=4000;
这是越野车路线。此语句将指针值增加 4000*sizeof(int).
这显然不是你想要的。
你在这里忘记了一个星号。
point+=4000;
*point = 0; //the buggy line
这两行将指针移动 4000 字节并尝试在那里写入。这是不允许的,因为您不拥有指针现在指向的内存(或者实际上有更严格的规则)。因此,对该内存的任何操作都可能产生不同的意外结果,包括崩溃。
请注意,我说的是 "can have",而不是 "must have"。这就是所谓的Undefined behavior:写入可以成功,可以工作,但写入不同的值,现在或以后可以让你的程序崩溃,可以格式化你的驱动器等。甚至可以是读取成功,但写入才不是。语言不保证具体结果。
事实上,在大多数实现和典型情况下,只要你不走得太远,它似乎都能工作(尽管可能会覆盖其他重要数据),但当你走得更远时,它会使你的程序崩溃.