`
yaogangshi
  • 浏览: 74146 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

VC中"其原因可能是堆被损坏"的原因解析

阅读更多

 

中午吃饭的时候跟同事聊天说起一个问题。说是在dll中delete在exe中创建的对象会弹出assert窗口并提醒说“堆破坏”。当时想想不太可能,回到公司后用VS2005试了一下没有出现问题。但是同事同VS2003新建了项目和工程后却出现了该问题。

 

具体的现象如下图所示:


断点的堆栈如下:


当时就觉得非常奇怪。到网上搜索了crtheap就有预感可能是crtheap的问题。

后来就搜到了微软的这篇文章,dll间传递CRT对象(文件句柄、环境变量、区域信息等)存在潜在问题。

 

进程分配内存(显式调用new,allocate,隐式分配内存比如调用strdup,strstreambuf::str等)

然后传递给DLL进行释放。都可能因为使用了不同的CRT库造成内存非法访问和栈破坏。

 

每一份CRT库的都有独立和唯一一份状态,并且每一份CRT库都有自己的对管理器。DLL和EXE可能使用了不同的CRT库,所以分配和释放内存的堆不能匹配从而导致了堆破坏。

 

修复方法:

EXE和所有的DLL都必须动态链接/MD到同一份CRT。

 


 参考:

http://msdn.microsoft.com/zh-cn/library/ms235460.aspx

  • 大小: 28.5 KB
  • 大小: 57.9 KB
0
0
分享到:
评论

相关推荐

    AVI文件解析播放器,高版本VC7编写的代码.rar

    在这个AVI解析播放器中,可能会有以下关键步骤: 1. 加载AVI文件:使用`ifstream`或其他文件操作类读取文件内容。 2. 分析RIFF结构:识别AVI chunk和sub-chunk,获取文件基本信息。 3. 解析AVI头部:提取流信息,如...

    EXE文件解析代码

    - 异常处理:为了确保程序的健壮性,解析过程中应处理可能出现的错误,如文件不存在、文件损坏等。 通过这个项目,开发者可以深入理解EXE文件的内部结构,学习如何使用C++进行二进制文件分析,同时也可以了解Visual...

    VC830L数字万用表使用说明书.doc

    本文将基于VC830L数字万用表使用说明书,深入解析其核心功能与使用方法,旨在帮助使用者充分掌握这一高效测量设备的运用技巧。 ### 一、VC830L数字万用表概述 VC830L数字万用表是由深圳市胜利高电子科技有限公司...

    vc 多媒体播放器 带源码

    8. **编码与录制**:虽然描述中没有特别提到,但高级的多媒体播放器可能还包括编码和录制功能。这需要额外的编码库,如FFmpeg,它可以处理多种编码格式的编码和解码。 9. **错误处理和兼容性**:良好的播放器应具备...

    vc6.0读取和显示DXF文件

    在读取过程中,可能会遇到格式错误或文件损坏的情况,需要有适当的错误处理机制,如抛出异常或显示错误消息。 总之,通过VC6.0和MFC,我们可以构建一个程序来读取和显示DXF文件。这个过程涉及文件I/O、数据解析、...

    图片格式转换工具(vc源码)

    源码中可能包含的类库是关键,它们可能提供了读取、解析和写入这两种格式图像的能力。对于BMP格式,类库可能包括读取文件头信息、解析颜色数据、处理位深度等功能;而对于JPEG格式,可能涉及JPEG编码和解码算法,如...

    MFC70.dll VC6.0有时候会缺的

    《MFC70.dll:VC6.0运行必备组件解析》 MFC70.dll,全称为Microsoft Foundation Classes 7.0动态链接库,是微软Visual C++ 6.0(简称VC6.0)开发环境中不可或缺的一个组件。在编程过程中,如果缺少这个文件,会导致...

    vc实用播放器MP3

    在"vc实用播放器MP3"中,MFC可能被用来构建播放器的图形用户界面(GUI)。 3. **音频解码**: MP3是一种有损音频压缩格式,为了播放MP3文件,需要先将其解码为原始的PCM(脉冲编码调制)音频数据。这个过程通常涉及...

    vc下实现的电子表设计

    在电子表设计中,可能会遇到数据溢出、无效公式、文件损坏等问题,都需要有适当的错误处理策略。 通过以上这些技术的综合运用,我们可以在VC6.0环境下成功实现一个电子表应用程序。这个过程不仅锻炼了编程技能,也...

    VC开发播放器源代码

    7. **错误处理**:对可能出现的播放错误进行适当的处理,如文件损坏、解码失败等,提供友好的错误提示。 通过研究这个VC开发的播放器源代码,开发者不仅可以提升对Windows编程的理解,还能深入学习到多媒体处理、...

    VC 二维码编码解码,汉字可编解码

    在IT行业中,二维码(Quick Response Code)是一种二维条形码,可以存储大量信息,包括文本、网址、联系信息等,并且被广泛应用于各种场景。在VC++(Visual C++)环境中,开发二维码编解码功能是一项重要的技术。...

    vc读取物理内存--非文件读写操作

    此外,压缩包中的`vc读取物理内存.wps`文件可能包含一个示例代码或者详细教程,可以参考其中的步骤和代码示例来理解并实现VC++读取物理内存的操作。但是,由于这里没有提供具体文件内容,我们只能根据主题给出一般性...

    vc遇到的问题

    根据描述中提供的部分信息,这种问题可能是由于注册表中的某些设置被修改或损坏导致的。 #### 解决“Find in Files”失效的方法 为了解决“Find in Files”功能失效的问题,一种可能的解决方案是通过修改注册表。...

    MC_VC调试电缆.rar

    3. **串行通信协议**:如UART、SPI、I2C等,这些协议可能在MC与VC的通信中起到关键作用。 4. **硬件接口**:电缆两端的接口标准,如USB、UART、RS-232、JTAG等,以及它们的电气特性、引脚定义和连接方法。 5. **调试...

    《vc精华文摘-文件篇》.rar_VC 文件

    这份文摘可能是由一系列文章、教程或代码示例组成,旨在帮助开发者深入理解VC中的文件操作。 1. **文件I/O基础**:在VC中,文件I/O通常使用C++标准库中的fstream头文件,包括ifstream(输入流)、ofstream(输出流...

    avi播放(VC)

    问题描述中提到的“播放AVI时是黑色的”是一个典型的视频播放错误,这可能是由多种原因导致的,包括但不限于编码解码问题、驱动程序不兼容、资源加载错误或编程实现中的bug。接下来,我们将深入探讨这些可能的原因...

    VC短信整合器 标题写的更详细

    在这个过程中,开发者可能使用了一些常见的C++库,如STL(Standard Template Library),其中的容器(如vector和list)和算法(如sort)可能会被用于组织和处理数据。此外,考虑到效率,可能还使用了多线程或者异步...

    VC GIF显示控件

    在VC++编程环境中,开发人员经常需要处理各种图形文件,其中GIF(Graphics Interchange Format)格式因其支持动画和小巧的文件大小而被广泛应用。"VC GIF显示控件"是专门为Visual C++(VC++)设计的一个组件,用于在...

    视频播放器源码vc

    在这个项目中,开发者可能已经实现了播放、暂停、快进、快退、音量控制等功能,并且可能支持多种视频格式。下面我们将深入探讨这个主题,了解视频播放器开发中的关键知识点。 1. **多媒体框架**:视频播放器的核心...

Global site tag (gtag.js) - Google Analytics