gpt4 book ai didi

c++ - 随机内存地址的设置值

转载 作者:行者123 更新时间:2023-11-30 01:13:06 25 4
gpt4 key购买 nike

我知道执行以下操作可能不是好的做法。但是,我很好奇这是否可能?

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.

我得到的错误是:

error: lvalue required as left operand of assignment

有什么我可以更改来使这项工作正常进行的吗,即使我知道这可能没有用。

最佳答案

错误是由于您试图分配给一个临时地址。

(&x + 1) = 0;

你的意思可能是:

*(&x + 1) = 0;

此表达式的结果取决于 x 的类型。如果 xint 类型,那么这将导致未定义的行为,因为您正在有效地分配给尚未分配的内存。

但是,使用如下类型将为您的示例定义明确的行为。

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++ - 随机内存地址的设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32872312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com