设置随机内存地址的值
Set value of random memory address
我知道这样做可能不是一个好习惯。然而,我很好奇这是否可能?
x = 1;
cout << *(&x + 1) << endl; // Prints value at next memory address.
(&x + 1) = 0; // DOESN'T WORK.
// I want to set the value of the next memory address.
我得到的错误是:
错误:左值是赋值的左操作数
有什么我可以改变使它工作,即使我知道这可能是没有用的。
这个错误是由于您试图分配一个临时地址。
(&x + 1) = 0;
你的意思可能是:
*(&x + 1) = 0;
这个表达式的结果取决于x
的类型。如果x
是int
类型,那么这将导致未定义的行为,因为您正在有效地分配尚未分配的内存。
然而,像下面这样使用一个类型将会为你的例子带来定义良好的行为。
struct Foo {
Foo& operator=(int i) { x[0] = i; return *this; }
int* operator&() { return x.data(); }
std::array<int, 2> x{{0}};
};
int main() {
Foo x;
x = 1;
std::cout << *(&x + 1) << std::endl; // Equivalent to 'x.x[1]' which is '0'.
*(&x + 1) = 0; // Ok.
}
在c++中,访问之前没有分配的内存总是未定义的行为。这种操作的结果几乎可以导致任何结果,例如,执行一条随机指令,在已释放的内存中四处放置。
您忘记使用*
操作符了
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- CUDA:统一内存和指针地址的更改
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用内存地址访问结构的属性值
- 如何读取特定地址的进程内存?
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 将布局映射到内存地址
- 为什么同一个变量的内存地址不同?
- LLVM 传递以在特定地址分配内存
- 无法将内存地址转换为值
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 给定特定内存地址的数组的动态内存分配
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 获取 R 数据帧的内存地址
- 如何配置bazel以运行地址/内存清理器?
- 存储 std::list 元素的地址;内存
- 确定库的地址内存