从/ MD Exe文件中删除/ MDd的DLL内存会导致堆损坏

时间:2017-11-29 18:00:41

标签: c++ windows dll

我想从dll中删除exe分配的内存。

当我测试..

  1. Exe:/ MD,DLL:/ MDd => HeapCorruption。
  2. Exe:/ MD,DLL:/ MD =>只要我看到,工作就会顺利。
  3. 甚至LocalAlloc都会得到相同的结果......

    只要我知道,多线程-dll crt使用相同的堆内存。 你能告诉我为什么案例1测试总是堆腐败吗?

    并且,我该如何解决这个问题?。

    - 补充。
    当然最好是在同一个地方限制分配/解除分配。

    但我的疑问是...... 大小首先从exe文件中可见,但是dll需要通过输出参数使用内存。 - 查询大小/然后获取缓冲区不是我想要的(对于dll用户来说太复杂了。)

1 个答案:

答案 0 :(得分:0)

  

我想从dll中删除exe分配的内存。

那不是个好主意。最好将代码内存分配和相应的释放留在EXE或DLL中。

即使EXE和DLL都是相同的构建类型(调试/发布),当在另一个中分配内存时,不应该释放内存。

如果在同一单元(即EXE或DLL)中分配和释放内存,则应该能够混合调试和非调试版本,而不会遇到内存损坏问题。