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

简介:

  ntdll.dll!76fdfadc() 未知

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

  ntdll.dll!76fc4f92() 未知

  ntdll.dll!76fa26fc() 未知

  ntdll.dll!76fe0b37() 未知

  ntdll.dll!76f9a967() 未知

  kernel32.dll!750d14d1() 未知

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

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

  wxWindowBase::DestroyChildren(void) 未知

  wxNavigationEnabled<wxWindow>::~wxNavigationEnabled<wxWindow>() C++

  wxPanelBase::~wxPanelBase() C++

  wxPanel::~wxPanel() C++

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

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




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

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


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

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

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



例子

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



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就不会出现类似的问题,指定了拷贝的长度






    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1887231,如需转载请自行联系原作者



相关文章
VS2005 Debug版,dll /MTd,exe /MDd的潜在bug
VS2005 Debug版,dll /MTd,exe /MDd的潜在bug
|
6月前
|
IDE 开发工具 C++
[记录][问题]Win32调用C++/WinRT DLL
[记录][问题]Win32调用C++/WinRT DLL
|
5月前
Win10系统msvcr120.dll丢失解决
Win10系统msvcr120.dll丢失解决
|
6月前
|
C++
MFC exe使用C++ dll中的std::string 崩溃
MFC exe使用C++ dll中的std::string 崩溃
VS2005 Debug版,dll /MTd,exe /MDd 跨dll使用CString的链接错误
VS2005 Debug版,dll /MTd,exe /MDd 跨dll使用CString的链接错误
|
编译器 计算机视觉
关于 Qt编译时使用msvc编译器报错“Error: cannot open ...main.obj.10836.32.jom for write” 的解决方法
关于 Qt编译时使用msvc编译器报错“Error: cannot open ...main.obj.10836.32.jom for write” 的解决方法
关于 Qt编译时使用msvc编译器报错“Error: cannot open ...main.obj.10836.32.jom for write” 的解决方法
|
C++
C++ 操作DLL的函数 Loadlibrary GetProcAddress FreeLibrary
C++ 操作DLL的函数 Loadlibrary GetProcAddress FreeLibrary
703 0