设置随机内存地址的值

Set value of random memory address

本文关键字:地址 内存 随机 设置      更新时间:2023-10-16

我知道这样做可能不是一个好习惯。然而,我很好奇这是否可能?

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的类型。如果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++中,访问之前没有分配的内存总是未定义的行为。这种操作的结果几乎可以导致任何结果,例如,执行一条随机指令,在已释放的内存中四处放置。

您忘记使用*操作符了