避免使用c c 指標引發的問題

2021-08-15 13:01:53 字數 1429 閱讀 7625

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...