这个问题纯粹是出于好奇。最近了解到如果在Heap中动态分配内存空间,删除内存空间是非常重要的。我的问题是,如果内存空间的地址已知,是否可以使用不同的 C++ 程序(从创建内存空间的程序)删除动态分配的内存空间?
这是一个例子:
CODE01.CPP
#include <iostream>
using namespace std;
int main() {
int *a = new int;
cout << a;
int foo;
cin >> foo; // for blocking the program from closing.
return 0;
}
CODE01.CPP 的输出(比方说)
0x7c1640
CODE02.CPP
#include <iostream>
using namespace std;
int main() {
int *a = (int*)0x7c1640;
delete a;
return 0;
}
这行得通吗?如果我先运行 code01.cpp
,然后立即运行 code02.cpp
,Heap 中的内存会被删除吗?
最佳答案
任何现代操作系统都会为这两个程序创建一个单独的虚拟地址空间。因此,您在 code01.cpp
中打印的地址仅与该程序相关,您无法从 code02.cpp
访问地址空间。
所以回答你的直接问题:运行 cpp02.cpp
不会以任何方式影响仍在运行的 cpp01.cpp
的状态。
关于c++ - 你能从一个单独的程序中删除动态分配的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58344031/