未修改地址的指针
Pointer not modifying the address?
我正在编写一个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;
}
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字节,并尝试在那里进行写入。这是不允许的,因为您没有指针现在指向的内存(或者实际上有更严格的规则(。因此,任何使用该内存的操作都可能产生不同的意外结果,包括崩溃。
请注意,我说的是"可以拥有",而不是"必须拥有"。这就是所谓的未定义行为:写入可以成功,可以工作,但写入不同的值,可以立即或稍后使程序崩溃,可以格式化驱动器,等等。甚至可以是读取成功,但写入不成功。语言无法保证具体结果。
事实上,在大多数实现中,在典型的情况下,只要你不走远,它似乎会起作用(尽管可能会覆盖其他重要数据(,但当你走得更远时,它会使你的程序崩溃。
相关文章:
- CUDA:统一内存和指针地址的更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 向指针地址添加 20 个字节偏移量
- 如何理解智能指针的底层指针地址?
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 返回数组中值的指针地址
- C++向指针地址添加 4 个字节
- 指针地址的内存偶尔更改了函数前和后返回
- 如何根据指针地址获取指针内容
- C++ 将指针地址传递给函数
- 直接从指针/地址访问数组的元素
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 如何保存指针地址,以便另一个指针可以继续处理它
- 间接寻址运算符如何返回带有运算符重载的指针地址
- 使用已删除的指针地址.据我所知,
- 如何保护类外用户可以修改的指针地址?C++
- 多个调用构造函数将更改C 中的成员指针地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- Visual Studio C 2K15-在指针地址上获取错误
- 指针地址和参考混乱