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也可能有问题,因为两者的内存结构不一样。
2021年目标:完成新书《闻缺陷则喜》,本博客右上公告有下载、阅读链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~