記一次goto記憶體洩漏

2021-09-29 03:19:20 字數 472 閱讀 1043

學習c語言時一直被告誡盡量不要使用goto語句,所以對其了解很少。在一次專案使用時由於之前的程式已經使用了goto,按照自己的理解去處理,結果導致記憶體未釋放。例子如下:

#include

int main()

// return 0;

error:

printf("aaaaa\n");

printf("11111.\n");

return 0;

}正常執行時,error 裡的內容也會執行,所以列印的結果是:

aaaaa

11111.

而我一直以為正常執行時error的內容不執行,在error之上用return, 導致error裡一些釋放資源的**未執行造成記憶體洩漏。golang裡的goto和c的用法也一樣也能執行error裡的程式。

記一次排查記憶體洩漏的過程

排查過程 程式測試執行過程中,其中乙個程序被linux系統給殺掉了,檢視系統日誌,發現是進行占用記憶體過大而觸發linux oom給殺掉了。重啟反覆幾次後均被殺掉,發現是記憶體洩漏問題。另發現有的時候有記憶體洩漏,有的時候沒有記憶體洩漏。針對這種情形,首先想到的是進行重現,然後使用工具檢測排查,同時...

記專案中的一次記憶體洩漏問題

最近在使用qt開發乙個大型專案,記憶體占用可能有點多,其中在vector.push back 的時候報了乙個segment fault錯誤,感到很奇怪。因為平時遇到段錯誤,大多數情況下都是陣列越界 使用訪問元素 而vector的push back 函式,在新增元素時,如果空間不足,會先向記憶體申請原...

一次線上記憶體洩漏的問題排查

上線了好久的專案今天突然出現cpu到達100 的情況,先將專案緊急重啟,恢復正常後登入伺服器排查gc日誌,發現存在記憶體洩漏的情況。top命令檢視程序情況,top hp pid檢視執行緒,再jstack匯出日誌。過程匆忙,忘了截圖 搜尋jsatck日誌看到許多執行緒阻塞在這一行 基本可以定位到問題,...