野指针成因及避免方法
接上一篇第一个问题:野指针成因及避免方法
一、成因分析
1.1 未初始化指针
声明后未赋值的指针会指向随机内存地址,直接解引用将导致未定义行为。
int *p; // 未初始化
*p = 10; // 非法访问随机地址
1.2 释放后未置空
动态内存释放后未置空指针,后续操作可能访问已回收的内存空间。
int *ptr = (int*)malloc(sizeof(int));
free(ptr); // 释放后ptr成为野指针
*ptr = 20; // 访问已释放内存
1.3 越界访问
指针操作超出数组边界时,指向无效内存区域。
int arr:ml-citation{ref="5" data="citationList"} = {0};
int *p = arr;
for (int i=0; i<=5; i++)
{
// 越界访问arr:ml-citation{ref="5" data="citationList"
*p++ = i;
}
1.4 返回局部变量地址
函数返回栈内存地址后,内存空间被回收。
i