野指针(C语言)

发布时间:2024年01月20日


野指针
//概念:野指针就是指针指向的位置是不可知的(随机的,不正确的
//,没有明确限制的,空间还属于操作系统而不属于程序的)
//野指针成因:
//1.指针未初始化
#include <stdio.h>
int main() {
?? ?int* p;//局部变量指针未初始化,默认为随机值
?? ?//此时p指向的空间不明确,为野指针
?? ?*p = 20;
?? ?return 0;
}



//2.指针越界访问
#include <stdio.h>
int main() {
?? ?int arr[10] = { 0 };
?? ?int* p = arr;//数组名就是指向第一个元素的地址
?? ?int i = 0;
?? ?for (i = 0; i <= 11; i++) {
?? ??? ?//当指针指向的范围超出数组arr的范围时,p就是野指针
?? ??? ?*(p++) = i;
?? ?}
?? ?return 0;
}



//3.指针的空间释放
int* test()
{
?? ?int a = 10;//a为局部变量,当超出了a的作用于\域,a会被销毁
?? ?return &a;
}
int main() {
?? ?int* p = test();//函数返回一个指针
?? ?//但是函数调用结束后,局部变量a会被销毁,现在p就变成了野指针
?? ?return 0;
}



//How.如何规避野指针
//1.指针初始化
//2.小心指针越界
//3.指针指向空间释放即放置NULL
//4.避免返回局部变量的地址
//5.指针使用之前检查其有效性 如if(p!=NULL)

文章来源:https://blog.csdn.net/lingengchao/article/details/135720000
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。