引用:http://blog.csdn.net/guoliushui/article/details/43017339

今天跟同事遇到了一个问题,问题背景:

一个动态库Tst.dll;

一个应用程序App.exe;

App.exe调用Tst.dll,其中动态库接口有个输出参数是vector<T> vtLst;

 

问题:

发现每次vtLst这具vector变量析构的时候程序崩溃。

最终发现是App.exe工程的属性设置导致的由原来的Multi-threaded Debug (/MTd)改为Multi-threaded Debug DLL (/MDd)后问题解决;

 

原因:

MTd/MT调用的是静态库模式,这种模式下应用程序和动态库中的堆是不共享的,各自使用各自的。它的内存分配原则是在库中申请的内存只能在库中释放。

MDd/MD调用的是动态库模式,这种械下应用程序和动态库都使用应用程序中的堆。申请和释放的都是应用程序上堆的空间。

相关文章:

  • 2021-10-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-17
  • 2022-12-23
  • 2021-04-24
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-04
  • 2021-12-11
  • 2021-08-13
  • 2022-01-12
相关资源
相似解决方案