由于dll编译方式不同,导致不同的dll模块加载了不同的运行时库,而不同的运行时库维护了不同的堆。如果跨dll传递stl容器,会引起A堆上创建的内存在B堆释放,引发程序崩溃。
解决问题有两种办法:
① 仅用基本的数据类型(数组,结构体,类)传递数据,并且注意内存创建和释放的空间在同一个dll内。
② 统一dll的编译方式,要用md都用md,要用mdd都用mdd,不要一个用md而另一个用mdd。
实际工作中,有些库的编译类型是我们不能控制的,这种情况下只能用方法①来解决问题。
由于dll编译方式不同,导致不同的dll模块加载了不同的运行时库,而不同的运行时库维护了不同的堆。如果跨dll传递stl容器,会引起A堆上创建的内存在B堆释放,引发程序崩溃。
解决问题有两种办法:
① 仅用基本的数据类型(数组,结构体,类)传递数据,并且注意内存创建和释放的空间在同一个dll内。
② 统一dll的编译方式,要用md都用md,要用mdd都用mdd,不要一个用md而另一个用mdd。
实际工作中,有些库的编译类型是我们不能控制的,这种情况下只能用方法①来解决问题。