如何排查大型C程式中的記憶體寫越界導致的coredump

2022-08-02 12:30:31 字數 1373 閱讀 3993

1樓:風若遠去何人留

首先要定位越界點

通過單步除錯 或者是加列印 找到出現錯誤的點然後,查附近** 90%以上的越界,都是出現在附近幾行**裡面 尤其是陣列指標操作,要細查

如果出現的崩潰點不一致,或者附近**確定沒問題那就得通過core dump分析哪個部分的記憶體被修改了,然後,到map中,查附近的其它陣列變數

然後查這些陣列變數的寫操作,看哪些可能出現越界。

這個是一個漫長的工作了 很煩

c++記憶體越界導致的崩潰有什麼好的檢查方法嗎

2樓:匿名使用者

沒有,只能排查**哈,這個是靠養成良好編碼習慣來避免的,而不是靠後面來查出來的

如何檢測c語言中的記憶體漏洞(leak)?

3樓:海鷗if耲獂

在動態分配的記憶體單元(即由函式malloc()或ealloc()分配的記憶體單元)不再使用卻沒有被釋放的情況下,會出現記憶體漏洞。未釋放記憶體單元本身並不是一種錯誤,編譯程式不會因此報告出錯,程式也不會因此而立即崩潰。但是,如果不再使用而又沒有被釋放的記憶體單元越來越多,程式所能使用的記憶體空間就越來越小。

最終,當程式試圖要求分配記憶體時,就會發現已經沒有可用的記憶體空間。這時,尤其是當程式設計師沒有考慮到記憶體分配失敗的可能性時,程式的執行就會出現異常現象。

記憶體漏洞是最難檢測的錯誤之一,同時也是最危險的錯誤。導致這個問題的程式設計錯誤很可能出現在程式的開始部分,但只有當程式奠名其妙地使用完記憶體後,這個問題才會暴露出來。

此時去檢查當前那條導致記憶體分配失敗的語句是無濟於事的,因為那些分配了記憶體卻未能按時釋放記憶體的**可能在程式的其它地方。

遺憾的是c語言並沒有為檢測或修復記憶體漏洞提供現成的方法。除非使用提供這種功能的商業軟體包,否則,程式設計師就需要以很大的耐心和精力去檢測和修復記憶體漏洞。最好的辦法是在編寫程式時就充分考慮到記憶體漏洞的可能性,並小心謹慎地處理這種可能性。

導致記憶體漏洞的最簡單的也是最常見的原因是忘記釋放分配給臨時緩衝區的記憶體空間,請看下述程式段:

# include

# include /** say hello to the user's and put the user's name in uppercase.*/void sayhi( char *name ){char * upname;int a;upname = malloc( strlen( name ) +1);

/ * allocate space for the name * /

for( a =0; a

linux系統下如何監測c程式的記憶體洩露

4樓:

暈, 你這個是什麼意思?我只知道記憶體溢位, 呵呵。

為什麼C語言程式的測試結果為超過記憶體限制

輸入的年月日之間用空格。是不是你的程式申請了很多記憶體,但是你後面又沒有釋放?看看 是否有記憶體溢位?c語言程式設計 關於記憶體限制 hdoj 2023 不知你是如何計算記憶體的?我的思路是 把mtx陣列定義為整形,這樣可節省不少空間的。如果每科成績不大於100分的話,可把它們定義成位元組型。這樣又...

為什麼我C 程式都執行不了,為什麼我寫的C 程式不能在別的電腦上執行呢?

實際上這個問題很多情況下是由於路徑設定的問題引起的,cl.exe 是vc使用真正的編譯器 編譯程式 其路徑在 vc根目錄 vc98 bin 下面,你可以到相應的路徑下找到這個應用程式。因此問題可以按照以下方法解決 開啟vc介面 點選vc tools 工具 option 選擇 directories ...

c分析下列程式中類MyClass的定義

y是父類例項物件,你沒有給y.i賦值,系統預設int型別的值為0 c 分析下列程式中類myclass的定義 myclass y new myclass baseclass x y x.i 100 console.writeline x.i,y.i x.i 100,已經給他copy賦值bai了100,...