類靜態指標的申請和釋放

2021-05-23 02:00:00 字數 1260 閱讀 6814

如果類有乙個靜態成員指標變數,在程序中執行new或malloc操作分配了記憶體,程序退出前並不需要呼叫new或malloc,因為系統會自動進行釋放。但這個靜態成員指標變數需要多少分配,又應該如果處理呢,最近在專案**中看到這樣的例子,和大家分享一下。

用valgrind執行,會發現記憶體洩漏,如下所示,當然,這是很顯然的,多次new但沒有delete。

valgrind --tool=memcheck --leak-check=full  ./a.out

==3893== leak summary:

==3893==    definitely lost: 5,242,880 bytes in 5 blocks.

==3893==      possibly lost: 4,194,304 bytes in 4 blocks.

==3893==    still reachable: 1,048,576 bytes in 1 blocks.

==3893==         suppressed: 0 bytes in 0 blocks.

==3893== reachable blocks (those to which a pointer was found) are not shown.

==3893== to see them, rerun with: --show-reachable=yes

那應該如何解決呢,當然是應該delete,但是類的靜態成員在類的生命週期中是不能delete的,感興趣的朋友可以試下,程序會core。

但是可以把靜態指標賦給另乙個區域性指標,把區域性指標釋放掉,這樣,即儲存了靜態指標,同時,資源也得釋放。修改**如下:

再用valgrind執行,問題解決。

==3912== leak summary:

==3912==    definitely lost: 0 bytes in 0 blocks.

==3912==      possibly lost: 0 bytes in 0 blocks.

==3912==    still reachable: 1,048,576 bytes in 1 blocks.

==3912==         suppressed: 0 bytes in 0 blocks.

==3912== reachable blocks (those to which a pointer was found) are not shown.

==3912== to see them, rerun with: --show-reachable=yes

指標的記憶體的申請和釋放本質

c 標準規定 delete空指標是合法的,沒有 一 delete之後將指標設定為null的好處 所以我們在delete指標後賦值為null或0是個好習慣。對乙個非空指標delete後,若沒有賦null,若再次delete的話 有可能出現問題。如下 可以看出delete是釋放指標指向的記憶體,並不是指...

記憶體的申請和釋放

常規用法 virtualalloc lpvoid lpaddress,size t dwsize,dword flallocationtype,dword flprotect lpaddress,指定記憶體開始的位址。dwsize,分配記憶體的大小。flallocationtype,分配記憶體的型別...

記憶體的申請和釋放

在c裡,記憶體管理是通過專門的函式來實現。另外,為了相容各種程式語言,作業系統提供的介面通常是c 語言寫成的函式宣告 windows 本身也由c和組合語言寫成 1分配記憶體malloc函式 需要包含標頭檔案 and 函式宣告 函式原型 void malloc int size 說明 malloc 向...