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

2021-09-23 10:31:25 字數 574 閱讀 1519

最近在使用qt開發乙個大型專案,記憶體占用可能有點多,其中在vector.push_back()的時候報了乙個segment fault錯誤,感到很奇怪。

因為平時遇到段錯誤,大多數情況下都是陣列越界(使用訪問元素),而vector的push_back()函式,在新增元素時,如果空間不足,會先向記憶體申請原來空間的兩倍大小的新的空間,然後把原來空間的元素拷貝到新空間。

所以這個時候問題就定位到了申請新空間這個步驟上,如果系統沒有更多的記憶體可供申請了呢?那麼就會報段錯誤。而我們知道堆記憶體有2-3g,一般都不會佔滿堆記憶體。什麼時候會佔滿堆記憶體呢?有一種記憶體錯誤會導致這種情況發生,那就是記憶體洩漏!!!記憶體洩漏一般發生在使用new申請了記憶體空間,但是沒有使用delete釋放,因此會導致記憶體洩漏,不斷膨脹

所以要謹記《effective c++》中提到的,new和delete要配對使用,如果允許的話,盡量多使用智慧型指標

記一次goto記憶體洩漏

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

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

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

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

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