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++ 中是不可能的。这是因为程序内存是虚拟的,您无法访问其他程序的内存,因为它们位于单独的虚拟内存中。管道可以满足您的需求。
那么,是否可以像这样在 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++ 中是不可能的。这是因为程序内存是虚拟的,您无法访问其他程序的内存,因为它们位于单独的虚拟内存中。管道可以满足您的需求。