如果一个指针指向的内存没有访问权限,或者指向一块已经废弃掉的内存,那么就无法对该指针进行操作,这就是野指针。
#include <stdio.h>
int main()
{
char *s;
gets(s); //从流中读取字符串,碰到文件末尾或者\n时结束。
puts(s); //字符串标准输出stdout,直到空字符,但是输出里面不包含空字符,包含\n
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *s = (char*)malloc(sizeof(char)*18); //向系统申请char类型长度的18个元素大小的堆内存
strcpy(s, "my name is hornets");
puts(s);
free(s); //释放内存
if (s)
{
puts(s);
}
return 0;
}
指针变量暂且不需要赋值的话,初始化为NULL,因为指针不会自动赋值NULL,他的缺省值是随机的。
当指针变量指向的内存被释放后,要将指针赋值为NULL。因为free()之后只是释放了内存,并未改变指针的值。
不要相信网上有些博客说野指针很恐怖,没有初始值的话就会有概率指向别的程序的值,从而会导致别的程序崩溃。这种说法是过时的,这是1998年VC6时的标准,哈哈哈哈。
原因是因为现在的系统都有内存保护,上节内存精讲里面我也说到过,用户进程拿到的都是虚拟地址,并不会影响别的程序内存,顶多会崩溃自己的程序而已,野指针并不是最可怕,而是需要保持自己良好的编程习惯。
不小心写出了野指针, 不要说出来, 不要改, 自己默默记住位置. 这就是你下个月奖金的来源.
原文:https://www.cnblogs.com/hornets/p/12489330.html