EXE中释放DLL中分配的内存
在DLL中分配的内存,如果到其调用者中释放,可能会出现CRASH的情况,其原因在于:
在DLL中的Code Generation如果是采用了MT(静态加载LIBCRTD.LIB)在该库中维护了一个allocator的对象对内存分配进行管理,当EXE中调用free等函数对内存进行释放时,他自己也维护了一个allocator对象(这个对象与DLL中得对象不是同一个对象),所以在free时找不到已经分配的内存,会crash.
在DLL中的Code Generation如果是采用了MD(动态加载MSVCRTD.DLL),那么allocator对象维护在MSVCRTD.dll中,当在EXE中调用时,如果也采用MD,那么他也是使用MSVCRTD中维护的对象,所以在调用free时不会crash.