_heap_alloc_dbg 崩溃

这个BUG调了我一整天-。-

基本原因是,Debug使用了的new调用Release的delete,我还不确定.

BUG的代码可能如下:

dll:
struct Status {
int iStatus;
CString str;
};

void GetStatus (Status* p) { /** do something */; }

调用代码如下:

Status st;
GetStatus (&st);

就这个简单的,看似没有错误的代码产生了问题。

st中有个CString,它是个类,析构函数会delete 内存块,它因为在内部会存在 +, =等操作,而DLL是Release的,调试程序是 DEBUG的,于是它+,=了Release版本的new 的内存块,当它析构的时候就有问题了---------

貌似解释不通啊。

------------------

反正换用DEBUG的DLL就不会有问题了。

-------------------

那DLL不是我写的---调死我了。

和MFC联系得太紧密,而且CString 在VC6和VC8的实现方式是不一样的----。它就决定了它只能用VC6进行开发,或者是通过VC6开发一个中间层的DLL才能进行调用---

--------------

闷。

原文地址:https://www.cnblogs.com/lin1270/p/2668927.html