VS2013、VS2005都是MD,跨dll使用stl的string崩溃问题
来源:互联网 发布:双轮矩阵图 编辑:程序博客网 时间:2024/05/01 19:03
何志丹
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 0
- VS2013、VS2005都是MD,跨dll使用stl的string崩溃问题
- 跨dll使用template/STL需要注意的问题
- 跨dll使用template/STL需要注意的问题
- DLL中传递STL参数(std::string传引用崩溃)
- VS2013的断点调试崩溃问题
- stl::string 使用问题
- 跨动态库使用stl出现崩溃问题
- STL String的使用
- 程序与DLL 使用 STL作为接口的问题
- MFC exe使用C++ dll中的std::string 崩溃
- 使用VS2013创建C#的dll文件
- 使用VS2013创建C#的dll文件
- 使用VS2013创建C#的dll文件
- 离奇的classifying.dll崩溃问题。 没有使用lib的问题
- 关于Win7下安装VS2013就崩溃的问题
- 解决VS2005打开js文件,中文都是乱码的问题
- aix使用g++编译时一个stl string的问题
- MFC 扩展DLL中使用STL 问题
- dataSerVer操作方法总结
- web安全(8)-- 程序缺陷
- nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping
- NOIP2016普及组第四题——魔法阵
- 新智慧记震撼上线,开启进销存管理新时代
- VS2013、VS2005都是MD,跨dll使用stl的string崩溃问题
- sourceTree 提交修改的时候选择某个文件进行提交
- Linux AutoTools工具
- linux vim .vimrc 设置
- AndroidStudio 更新到BuildTool 25.0.0遇到的问题的解决
- 求两个正整数的最大公约数和最小公倍数(法一)
- 几款常见的HTML5响应式Web开发框架
- ssl/scp等自动连接处理
- Java Web—数据库分页操作