0
点赞
收藏
分享

微信扫一扫

VS2013、VS2005都是MD,跨dll使用stl的string崩溃问题

忍禁 2022-07-27 阅读 56


何志丹

VS2013和VS2015的工程选项都设置成MD。

VS2005编一个dll,有一个类CTest,有一个私有的std::string类型的成员变量。

VS2013的exe 中CTest test 没有使用test。


崩溃,原因:堆栈溢出。

经查:

VS2013中, sizeof(std::string) 24

VS2005中,sizeof(std::string) 28

故原因是:

VS2013 为test分配24个字节,VS2005调用std::string(需要28字节)的构造函数和析够函数。于是破坏了堆栈。

根本解决办法:

不使用VS自带的stl,使用统一的stl。

指标不治本的办法:

CTest的成员变量由std::string改成std::string*。


最常见的办法是:
用同一个版本的VS编译。

注意:std::vector也有类似问题。
dll的string赋值给exe的string也可能有问题,因为两者的内存结构不一样。

举报

相关推荐

0 条评论