情景描述:
1、程序中使用了DLL。
2、DLL中调用malloc(), 程序中对应地调用了free()
3、书上说,假如DLL和程序链接的C/C++运行库都是DLL版本,那么程序能够正常工作。假如它们链接的C/C++运行库是静态版本,free调用就会失败。
问一下,书上的说法怎么样理解?为什么?
1、程序中使用了DLL。
2、DLL中调用malloc(), 程序中对应地调用了free()
3、书上说,假如DLL和程序链接的C/C++运行库都是DLL版本,那么程序能够正常工作。假如它们链接的C/C++运行库是静态版本,free调用就会失败。
问一下,书上的说法怎么样理解?为什么?
解决方案:35分
请看这个贴,看完LZ就明白了:http://bbs.csdn.net/topics/390712522
解决方案:5分
原因是,运行时库中有,malloc 和free 的实现代码
假如,DLL中静态链接 运行时库,exe 也静态链接 运行时库 ,
那么程序运行时,就会有两份运行时库代码。
他们各自管理各自的内存分配逻辑。
不同模块的内存分配,必须互相匹配,不然就张冠李戴,互相干扰,导致内存管理出错。
假如,DLL中静态链接 运行时库,exe 也静态链接 运行时库 ,
那么程序运行时,就会有两份运行时库代码。
他们各自管理各自的内存分配逻辑。
不同模块的内存分配,必须互相匹配,不然就张冠李戴,互相干扰,导致内存管理出错。