msvcr110.dll!free(void*pBlock)崩溃分析

 ntdll.dll!76fdfadc()未知

创新互联主营定远网站建设的网络公司,主营网站建设方案,重庆APP开发公司,定远h5微信平台小程序开发搭建,定远网站营销推广欢迎定远等地区企业咨询

 [下面的框架可能不正确和/或缺失,没有为 ntdll.dll 加载符号]

 ntdll.dll!76fc4f92()未知

 ntdll.dll!76fa26fc()未知

 ntdll.dll!76fe0b37()未知

 ntdll.dll!76f9a967()未知

 kernel32.dll!750d14d1()未知

msvcr110.dll!free(void * pBlock) 行 51C

 CThreeGridCtrlWithSign::`scalar deleting destructor'(unsigned int)C++

 wxWindowBase::DestroyChildren(void)未知

 wxNavigationEnabled::~wxNavigationEnabled()C++

 wxPanelBase::~wxPanelBase()C++

 wxPanel::~wxPanel()C++

 CFlightInstrumentPanel::~CFlightInstrumentPanel() 行 152C++

 CFlightInstrumentPanel::`scalar deleting destructor'(unsigned int)C++

在处理该问题上,通过不断的屏蔽掉已有的功能,才解决这个问题

原因分析:拷贝一个字符串给类的字符串数组,由于过长,导致数组越界,在析构类的时候,出现问题

问题回顾;free说明了类的释放出现了问题,一个类的new操作,会分配一块内存保存类的成员变量,

delete的时候释放,正常情况下,分配的内存会有一个结束的标志位,当出现数组越界情况下,标志位

被覆盖掉,导致释放内存的时候定位出错

例子

#include

#include

#include

class Test

{

private:

  char m_szTitle[8];

public:

  void SetTitle(char* szTitle)

  {

    strcpy(m_szTitle, szTitle);

  }

};

int main(int argc, char* argv[])

{

  Test* pTest = new Test();

  pTest->SetTitle("http://fengyuzaitu.blog.51cto.com");

  delete pTest;

  return 0;

}

注意:调用strncpy就不会出现类似的问题,指定了拷贝的长度


网站标题:msvcr110.dll!free(void*pBlock)崩溃分析
文章URL:http://bzwzjz.com/article/jsjpis.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站建设 成都网站建设 成都网站制作 网站设计制作 广安网站设计 移动手机网站制作 外贸网站建设 网站制作 成都网站建设推广 企业网站建设 企业手机网站建设 网站制作报价 网站制作 成都网站建设流程 宜宾网站设计 网站建设开发 营销网站建设 外贸网站设计方案 成都h5网站建设 高端网站建设 营销网站建设 H5网站制作