野指針處理的三個要點:
- 定義指針時,把指針變量賦值爲NULL
- 釋放內存時,先判斷指針變量是否爲NULL
- 釋放完畢後,把指針變量重新賦值爲NULL
#include <stdio.h>
#include <stdlib.h>
void free_mem(char *p)
{
if (p != NULL){
free(p);
p = NULL; // 這裏的p只是形參,把NULL賦給形參並不影響實參
// 所以當函數執行完後,實參pa的值並不爲NULL
}
}
int main(void)
{
char *pa = NULL;
pa = (char *)malloc(100);
free_mem(pa);
return 0;
}
如果最後在main函數裏面調用兩次free_mem,程序就會報錯,因爲此時pa不爲NULL,執行free(pa)會釋放掉一塊已經釋放了的內存