【发布时间】:2020-06-04 21:44:47
【问题描述】:
那么,是否可以像这样在 C++ 中创建一个指针并打印出来:
#include <iostream>
int main() {
int* ptr = new int;
(*ptr) = 3;
std::cout << ptr << '\n';
}
然后运行它,复制 ptr 的值,并在另一个程序中,当它运行时,这样做:
#include <iostream>
#include <cstring>
int main() {
long long pointer;
std::cin >> pointer;
int* ptr = nullptr;
std::memcpy(&ptr, &pointer, sizeof(pointer));
std::cout << *ptr << '\n';
}
然后打印出 3?有没有可能,如果没有,那究竟是为什么?
【问题讨论】:
-
我认为您正在寻找所谓的管道或共享内存。
-
好吧,我不想将它用于某些目的,或者至少现在,这主要是一个理论问题。
-
这是不可能的。程序使用从操作系统获得的虚拟内存。一个程序中的内存地址通常不会与不同程序中的相同地址指向相同的位置。
-
@Andrew 因为问题是目前写的,所以无法回答,因为这是特定于 API 和操作系统的。我们能做的最好的事情就是说“管道或共享内存”,这是做这类事情的一般机制。但还有其他方法。
-
看起来是 XY 问题。您可以查看 Boost.Interprocess 以获取在进程之间共享数据的一些血腥细节(正如其他人已经指出的那样,这不像共享指针值那么容易)。
标签: c++ pointers memory heap-memory