溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-06-27 09:16:09 來源:網(wǎng)絡(luò) 閱讀:1649 作者:fengyuzaitu 欄目:編程語(yǔ)言

  ntdll.dll!76fdfadc() 未知

  [下面的框架可能不正確和/或缺失,沒有為 ntdll.dll 加載符號(hào)]

  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++




在處理該問題上,通過不斷的屏蔽掉已有的功能,才解決這個(gè)問題

原因分析:拷貝一個(gè)字符串給類的字符串?dāng)?shù)組,由于過長(zhǎng),導(dǎo)致數(shù)組越界,在析構(gòu)類的時(shí)候,出現(xiàn)問題


問題回顧;free說明了類的釋放出現(xiàn)了問題,一個(gè)類的new操作,會(huì)分配一塊內(nèi)存保存類的成員變量,

delete的時(shí)候釋放,正常情況下,分配的內(nèi)存會(huì)有一個(gè)結(jié)束的標(biāo)志位,當(dāng)出現(xiàn)數(shù)組越界情況下,標(biāo)志位

被覆蓋掉,導(dǎo)致釋放內(nèi)存的時(shí)候定位出錯(cuò)



例子

#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;

}


注意:調(diào)用strncpy就不會(huì)出現(xiàn)類似的問題,指定了拷貝的長(zhǎng)度


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI