野指针的概念 & 如果规避野指针

admin2024-07-05  14

目录

野指针的概念

有关野指针的代码

如何规避野指针 


野指针的概念

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)


有关野指针的代码

指针未初始化: 

#include<stdio.h>
int main()
{
	int* p;
	*p = 20;
	printf("%d\n", *p);

	return 0;
}

局部指针变量未初始化,默认为随机值,且程序会报错

野指针的概念 &amp; 如果规避野指针,第1张


指针越界访问: 

#include<stdio.h>
int main()
{
	int arr[10] = { 0 };
	int* pa = &arr;

	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]); i++)
	{
        //当指针指向的范围超出数组arr的范围时,pa就是野指针
		*(pa + i) = i;
	}

	return 0;
}

数组的长度为10,那么数组的下标为0~9,但用指针变量pa来操作数组时超出了数组的范围,这时的pa就是野指针,且程序会报错,直接终止运行

野指针的概念 &amp; 如果规避野指针,第2张


指针指向的空间提前释放: 

int* test()
{
	int a = 100;
	return &a;
}
#include<stdio.h>
int main()
{
	int* p = test();
	printf("%d\n", *p);

	return 0;
}

int类型的变量a的空间是进入test()函数创建,出test()函数时销毁(还给操作系统)

但是在销毁前将a的地址返回给同类型的指针变量p中,p此时存放的就是a的地址

但a已经被销毁了,所以再使用p访问a的空间时就会存在非法访问,此时的p就是野指针


如何规避野指针 

1.指针初始化:

能明确知道指针该初始化为谁的地址时,就直接初始化

不知道初始化为什么值时,就赋值为NULL(空指针)

2.小心指针越界 

3.指针指向的空间释放后,及时置空(NULL)

4.避免返回局部变量的地址 

5.指针使用之前检查有效性 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!