c++中的指標讓程式設計師有了更多的靈活性,但它同時也是一把雙刃劍。要想避免編寫**的時候盡可能避免指標帶來的問題,就需要知道不恰當的使用指標會引發那些問題。
一:避免記憶體洩漏問題
我們知道程式執行需要記憶體的,同時我們也知道記憶體是有限的,是計算機特別寶貴的資源,對於使用完的記憶體,應當及時的歸還給作業系統。如果是棧上的記憶體,使用完,作業系統會幫我們自動**,但是如果通過動態分配得到堆上的記憶體,需要我們手動釋放。
如果我們在程式中忘了釋放這些動態記憶體,而程式又是會持續執行的服務程序,會導致記憶體占用越來越高。
例如 #include
using namespace std;
int main()
int*p=(int*)new(int);
*p=10;
cout<<"main endl"return 0;
#include
using namespace std;
class test
publlic :
test(int x=0):m_val(x){}
~test()
cout<<"function be called"<
public:
int m_val;
int main()
trytest *t= new test(100);
coutdelete t;//這條語句沒有執行的機會,導致記憶體洩漏。
catch(....)
cout<<"wrong"};//如果是龐大的工程面前 肯定是很難找到bug的地方。
二:不要使用野指標
野指標也叫懸掛指標,它不是null指標,它比null指標更容易犯錯。指標被delete之後,沒有置null,事實上delete只是把指標所指的記憶體釋放掉,但是指標的值還是這塊記憶體,只不過這塊記憶體,已經被收了不被該程序在使用。
(1)例如:
#include
using namespace std;
int main()
int*p=(int*)new(int);
*p=10;
cout<<"main endl"*p=20; p是個野指標,繼續訪問p指向的記憶體。
return 0;
(2)例如:
c++中,區域性變數是存放在棧中的,特點就是隨著函式結束而銷毀,因此在程式中將區域性變數的位址返回後賦值給乙個指標,這也是乙個野指標。
#include
using namespace std;
int * fun()
int i =8;
return&i;//返回區域性變數的位址,錯誤用法。
int main()
int*p =fun();
int x=4;
cout<<"*p="<<*p<
cout<<"main endl"<
return 0;
Golang語言如何避免空指標引發的panic詳解
目錄 在 golang 語言專案開發中,變數操作不當就會觸發空指標引發程式 panic。空指標就是未分配記憶體的指標型別的變數,變數的值是 nil,因為操作空指標會引發 panic,所以我們在程式開發中要特別小心。在呼叫結構體指標型別返回值的函式或方法時,並且需要操作返回值的字段或方法,此時,我們就...
c c 使用指標需要注意的問題
分配空間 初始化 釋放 二 常見的錯誤有幾種 1 記憶體分配未成功,卻使用了它 程式設計新手常犯這種錯誤,因為他們沒有意識到記憶體分配會不成功。常用解決辦法是,使用記憶體之前檢查指標是否為null。如果指標p是函式的引數,那麼在函式的入口處用assert p null 進行檢查。如果使用malloc...
C C 指標陣列的問題
本人小白,本文專門給初學者準備,大神自動跳過。不喜勿噴,謝謝。如有錯誤,請指正,謝謝。正文 進來有人問我一些有關於指標的問題。在此我貼出問題 問題如下 char msg 5 mian printf s msg 0 問題一 為什麼msg 0 可以輸出thank you?問題四 如果用msg可以輸出th...