1. 程式人生 > >一個指標釋放後不置空的危害

一個指標釋放後不置空的危害

今天面試碰到這個問題了,可以說這個問題是我回答最冤枉的。

我覺得我對這個問題,有很清晰的認識。但是不知道為什麼,嘴禿嘍了一句記憶體洩漏,真想打自己一個大嘴巴。

記憶體洩漏的情況的產生是:例如:用int* p=(int*)malloc(sizeof(int));讓p重新指向其它,這樣用malloc()開闢的空間就找不到了,造成記憶體洩漏。

一個指標釋放後不置空的後果:

free(p);後p是一個非法的指標。不可以訪問它。如果程式碼很長,誤以為p合法,直接訪問,有可能會造成程式崩潰。

不置空的話,在後面無法檢測指標的合法性。我們在平時程式設計時,對空指標很容易檢測(if(NULL==p)),但是對於非法指標p不為空,我們是無法檢測到的。

防止對一個已經釋放的指標多次釋放造成程式崩潰,但是對一個null指標多次釋放是合法的。

所以,我們在free後一定要將指標置空。

防止我們忘記,可以在程式開始用巨集定義一個函式:

#define SAFE_FREE(p) \ if (p)           \ {                \ free(p);     \ p = NULL;    \ } 這樣我們就可以使用SAFE_FREE防止我們忘記置空。

不置空的危害性是非常大的,所以一定要置空。