今天遇到了这个assert,发现是dll中的一个局部vector释放的时候报的,这个vector是在dll中定义的,然后实在exe中分配的空间(通过引用传参数,然后调用push_back方法),这样,vector释放的时候它会发现dll正在释放一个不是由dll分配的内存,所以就会出此断言,一个临时的解决方案是,在dll中分配,可以通过vector的reserve方法来实现,当然,更好的解决方法是上层避免这种用法
还有在使用mfc时也遇到过这个问题,
mfc主程序中引用了一个dll,在dll中动态分配了一个对象,然后在主程序中释放,就会出现问题,是由于程序是静态依赖mfc运行时库的,这样在释放的时候,只查找主程序所在的堆空间,应用程序就认为释放了一个不再堆列表中的地址,而改为动态依赖mfc,程序才会查找依赖的dll中的堆列表,所以就没有问题了