1. 程式人生 > >0xC0000005;Access Violation(棧區空間很寶貴, linux上棧區空間默認為8M,vc6下默認棧空間大小為1M)

0xC0000005;Access Violation(棧區空間很寶貴, linux上棧區空間默認為8M,vc6下默認棧空間大小為1M)

str 操作 方法 匯編代碼 面經 不能訪問 應該 最好 出現

寫C/C++程序最怕出現這樣的提示了,還好是在調試環境下顯示出來的,在非調試狀態就直接崩潰退出.

技術分享圖片

從上述匯編代碼發現在取內存地址 eax+38h 的值時出錯, 那說明這個地址非法唄, 不能訪問, 一般是訪問了空指針引起的.

技術分享圖片

直接調用QList::append()方法也會出錯了, 此時匯編也指向的是在讀取內存 ebp-8 時出錯. 這段代碼運行背景是在棧上申請了很多緩沖區,然後緩沖區在不停添加內容, 直到某一階段程序崩潰. 由於棧區空間很寶貴, linux上棧區空間默認為8M,vc6下默認棧空間大小為1M, 當棧上數據過大時, 棧區已經被損壞了

, 此時訪問到無效的內存地址. 所以程序裏面經常會出一些莫名其妙的崩潰, 調試定位到的代碼也非常正常, 這下就應該註意了, 是否棧上數據過大,已經損壞. 當操作大量數據時, 最好在堆上分配 .

http://tcspecial.iteye.com/blog/1909831

0xC0000005;Access Violation(棧區空間很寶貴, linux上棧區空間默認為8M,vc6下默認棧空間大小為1M)