【发布时间】:2012-08-31 12:46:40
【问题描述】:
我在 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 会失败。
有人可以解释为什么免费会失败吗? 在这里找到类似的问题: Memory Allocation in Static vs Dynamic Linking of C Runtime
但我和 MrPhilTx 有同样的疑问: 不是所有的堆都在同一个地址空间中吗?
谢谢!
【问题讨论】:
标签: c++ c visual-c++