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

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

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也可能有问题,因为两者的内存结构不一样。


相关文章
|
3月前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
59 0
|
15天前
|
存储 C++
C++ dll 传 string 类 问题
C++ dll 传 string 类 问题
15 0
|
27天前
|
存储 算法 程序员
【STL】string
【STL】string
|
3月前
|
安全 算法 C语言
【C++进阶】深入STL之string:掌握高效字符串处理的关键
【C++进阶】深入STL之string:掌握高效字符串处理的关键
38 1
【C++进阶】深入STL之string:掌握高效字符串处理的关键
|
3月前
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
33 1
|
3月前
|
程序员 C++
C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现
C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现
29 1
|
3月前
|
C语言 C++
C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类
C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类
27 0
|
3月前
|
编译器 C语言 C++
【C++/STL】:string类底层的模拟实现
【C++/STL】:string类底层的模拟实现
28 0
|
3月前
|
算法 C++ 容器
【C++/STL】:string类的基本使用
【C++/STL】:string类的基本使用
21 0
|
3月前
|
C++ 容器 存储
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)
【C++语言】想学STL,先细细拿捏string类,万字详解string类 (内附精美思维导图)