C++:在一个程序中创建一个指针并在另一个程序中访问该位置

C++: create a pointer in a program and access that location in another program

那么,是否可以像这样在 C++ 中创建一个指针,并打印出来:

#include <iostream>
int main() {
    int* ptr = new int;
    (*ptr) = 3;
    std::cout << ptr << '\n';
}

然后运行它,复制ptr的值,在另一个程序中,虽然这是运行ning,这样做:

#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 个?有可能吗,如果没有,那到底是为什么?

在标准 C++ 中是不可能的。标准 C++ 没有 programs 的概念。就语言而言,只有一个程序 - 目前正在翻译的那个。

在 C++ 标准之外,确实存在多任务操作系统,可以同时 运行 多个进程(您现在可能正在使用一个)。此类操作系统使用虚拟内存,一个进程不能直接访问另一个进程的虚拟内存。

这在技术上是可行的,例如使用 process_vm_readv 系统调用(Linux 特定),如果您有足够的权限。在使用这种技巧之前,您必须以某种方式传达您要读取的进程 ID 和虚拟地址,直到第一个程序 运行s.

才知道这些信息

虽然这可能是可能的,但这可能不是您需要做的事情,除非您正在实施调试器或类似工具。如果您只是想这样做以便进程可以通信,还有其他方法。没有 C++ 标准方式,因为 C++ 不知道进程,但是例如 POSIX 标准指定了许多进程通信方式:共享内存、文件、网络套接字等。

这在标准 C++ 中是不可能的。这是因为程序内存是虚拟的,您无法访问其他程序的内存,因为它们位于单独的虚拟内存中。管道可以满足您的需求。