我在 Jeffrey Richter 和 Christophe Nasarre 所著的 Windows via C-C++ 一书中看到了下面的注释。
检查以下代码:V
OID EXEFunc() {
PVOID pv = DLLFunc();
// Access the storage pointed to by pv...
// Assumes that pv is in EXE's C/C++ run-time heap
free(pv);
}
PVOID DLLFunc() {
// Allocate block from DLL's C/C++ run-time heap
return(malloc(100));
}
所以你怎么看?前面的代码能正常工作吗?DLL 函数分配的块是否被 EXE 函数释放?答案是:也许。显示的代码没有为您提供足够的信息。如果 EXE 和 DLL 都链接到 DLL C/C++ 运行时库,则代码可以正常工作。但是,如果其中一个或两个模块链接到静态 C/C++ 运行时库,则对 free 的调用将失败。
我无法理解为什么在将模块与静态 C 运行时链接时调用 free 会失败。
有人可以解释为什么免费失败吗?在这里找到了类似的问题: C运行时的静态与动态链接中的内存分配
但是我在这里和 MrPhilTx 有同样的疑问:不是所有的堆都在同一个地址空间中吗?
谢谢!