【发布时间】:2021-10-17 22:18:31
【问题描述】:
这没什么问题,但是,我有一个 C++ 程序,我想打印一个变量(指针)的内存地址,但它总是显示相同的值。
这是我的代码的 sn-p
#include <iostream>
int main() {
int a = 90; // any random value returns the exact same pointer
int* b = &a;
std::cout << b++ << std::endl;
// returns only one and the same value even on recompilation, which is 0x61ff08 neither does setprecision do any thing
std::cout << *b << std::endl;
/* trying to get some random values from memory but it also shows the same value which is 6422284 */
// EDIT: I purposely made it like this to get some random value from the memory whenever it is executed
}
尝试重新编译并再次执行,但它给出了相同的输出(即使在重新编译时也是如此)。
事实上,当我在我的 linux 虚拟机上尝试这个时,它总是在每次执行时给出不同的随机值。
我在我的真机上使用 Win10,使用 g++ 作为编译器,没有任何优化标志,并且对 C++ 编程相当陌生。
只是想知道这是 Windows 特有的事情,还是由于虚拟机显示不同的值而指针总是具有相同的值? 和 如果这应该返回一个随机值,那么为什么它在 Win10 上不起作用。
【问题讨论】:
-
这是一个未定义的行为,它取决于操作系统内核如何为您的进程分配内存。可能你的系统内存不忙。
-
*b调用未定义的行为,因为b未指向有效内存 -
"如果这应该返回一个随机值,那么为什么它不能在 Win10 上运行。"从技术上讲,这不是 C++ 的问题:C++ 完全不知道底层内存的样子,如果它是随机的,......