msvcr110.dll!free(void*pBlock)崩溃分析-创新互联
ntdll.dll!76fdfadc() 未知
成都创新互联一直在为企业提供服务,多年的磨炼,使我们在创意设计,成都全网营销推广到技术研发拥有了开发经验。我们擅长倾听企业需求,挖掘用户对产品需求服务价值,为企业制作有用的创意设计体验。核心团队拥有超过10年以上行业经验,涵盖创意,策化,开发等专业领域,公司涉及领域有基础互联网服务四川雅安服务器托管、app软件定制开发、手机移动建站、网页设计、网络整合营销。[下面的框架可能不正确和/或缺失,没有为 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
wxPanelBase::~wxPanelBase() C++
wxPanel::~wxPanel() C++
CFlightInstrumentPanel::~CFlightInstrumentPanel() 行 152 C++
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就不会出现类似的问题,指定了拷贝的长度
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章题目:msvcr110.dll!free(void*pBlock)崩溃分析-创新互联
分享路径:http://cdiso.cn/article/dpgshp.html