内存操作分析(野指针)
第一点:1.什么是野指针,指针变量中的值是非法的内存地址,进而造成野指针。
2.野指针不是空指针,是指向不可用内存地址的指针。
3.NULL指针并没有害处,很好判断,也很好调试。
4.C语言中无法判断一个指针所保存的地址值是否合法。
第二点:野指针的由来
1.局部指针变量没有被初始化
2.指针所指向的变量在指针指向之前被销毁(例如:返回局部变量,局部数组的地址)
3.使用已经释放过的指针(动态内存分配)
4.进行了错误的指针运算
5.进行了错误的强制类型转化
#include <stdio.h>
#include <malloc.h>
int main()
{
int* p1 = (int*)malloc(40);
int* p2 = (int*)1234567; //进行了错误的强制类型转化
int i = 0;
for(i=0; i<40; i++)
{
*(p1 + i) = 40 - i;//进行了错误的指针运算,循环变量不应该是40而是10
}
free(p1);
for(i=0; i<40; i++)
{
p1[i] = p2[i]; //使用已经释放过的指针
}
return 0;
}

浙公网安备 33010602011771号