昨天遇到一问题,令我百思不得其解,问题大概是这样的:
函数封装都是写在外部dll中的,主程序部分只是一些简单的调用。
dll中有一个方法原型大概是这样的:bool Function(list<Type>& l)
在主程序中调用一切没有问题,得出的结果也是正确的,只是在主程序结束析构数据成员时出错。
查看Call Stack,确定是析构时出错,_CrtIsValidHeapPointer断言验证失败
起初把注意力都放在析构上了,走了死胡同,以为是模板类型Type引起的问题,导致内存读写错误。把list换成vector,把stack内存声明换为heap,都是同样的问题,写了个简单的Console App,怎么玩都不会出错。
把问题再次聚焦到断言_CrtIsValidHeapPointer,MSDN如下解释:
Verifies that a specified pointer is in the local heap (debug version only).
这里的关键是in the LOCAL heap,外部dll不在此列,当然就出错了 -_-~!!!
把Debug模式换为Release,一切OK。
哎 ! 白忙活一场