野指針
野指針通常是因爲指針變量中保存的值不是一個合法的內存地址而造成的
野指針不是NULL指針,是指向不可用內存的指針
NULL指針不容易用錯,因爲if語句很好判斷一個指針是不是NULL
(注意:C語言中沒有任何手段可以判斷一個指針是否爲野指針!)
野指針的由來
局部指針變量沒有被初始化
#include <stdio.h>
#include <string.h>
struct Student
{
char* name;
int number;
};
int main()
{
struct Student s;
strcpy(s.name, "Delphi Tang"); // 這裏的s.name未初始化
s.number = 99;
return 0;
}
使用已經釋放過後的指針
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void func(char* p)
{
printf("%s\n", p);
free(p);
}
int main()
{
char* s = (char*)malloc(5);
strcpy(s, "Delphi Tang");
func(s);
printf("%s\n", s); // 在函數調用中指針已經釋放
return 0;
}
指針所指向的變量在指針之前被銷燬
#include <stdio.h>
char* func()
{
char p[] = "Delphi Tang";
return p;
}
int main()
{
char* s = func();//func爲調用函數,都是局部變量,調用完成都銷燬
printf("%s\n", s); // 已經被銷燬
return 0;
}
我們在使用中一定要避免這些情況!