当前位置:首页 > 亲子教育 > 正文内容

空类型指针、空指针、野指针

admin3周前 (05-25)亲子教育15

空类型指针、空指针、野指针

<[id_1833518234]>[id_[id_16[id_939466532]5116553]773146785[id_995624270]id_595955898]

空类型指针、空指针、野指针 第1张

void代表一种无类型,而void*则是一种无类型指针,也被称为通用指针。这种指针能够容纳任何类型的指针,指向任何对象类型。因此,我们不能对无类型指针进行解引用操作,必须将其强制转换为特定类型的指针,才能执行解引用。

空类型指针:

[id_1864108888]

空指针-NULL

在C语言中,空指针NULL指的是地址为0的那块空间

#define NULL((void*)0)

这块区域是禁止我们进入的,因此,对NULL对象不能执行解引用c语言空怎么表示,故此,在每次尝试对指针进行解引用之前,我们必须确认它是否为空指针。

野指针

野指针是指向一个非法的或已销毁的内存的指针。

对野指针进行解引用操作是非法的。

百度百科指出,在C/C++这类编程语言里,所谓的悬空指针,是指当指针原本指向的对象被删除后,该指针便失去了指向的有效目标,从而成为悬空指针。而野指针,则是指那些尚未进行初始化的指针。

在这里,我们把悬空指针归为野指针。

造成野指针的原因 1.指针未初始化

int main()
{
	char* p;
	//此时p是野指针
	return 0;
}

由于指针p未经过初始化,它便成为了一个未定义的指针,若在此之后尝试对p进行解引用,将会导致对内存的非法访问c语言空怎么表示,进而引发程序崩溃。

2.指针越界访问

int main()
{
	int arr[] = {1,2,3,4,5};
	int* p = arr;
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ",p[i]);
	}
	return 0;
}

尽管程序目前运行良好,但事实上已经越界访问了数据;尽管仅是访问了那些不合法的内存区域,且并未对这些区域的值进行修改,可能是因为程序尚未捕捉到这一错误,但这并不意味着程序完全无误(编译器也是由人编写的,同样可能含有bug,编译器未能及时报错空类型指针、空指针、野指针,并不意味着我们的代码没有问题!),然而,针对接下来的代码,程序将会直接崩溃。

int main()
{
	int arr[10] = {0};
	int i = 0;
	int* p = arr;
	for (i = 0; i <= 10; i++)
	{
		*p = i;
		p++;
	}
	return 0;
}

因为这里非法访问内存的同时试图改变空间的值,所以程序崩溃。

3.指针指向的空间已经释放

char* fun()
{
	char arr[] = "abc";
	return arr;
}
int main()
{
	char* p = fun();
	printf("%s\n",p);
	return 0;
}

执行程序,给出如下警告

尽管程序并未发生崩溃,然而此处的编程方式是不合规的;arr作为局部变量,一旦函数调用结束,其栈帧就会被销毁,并且回收至操作系统,我们便失去了对这一局部变量空间的访问权限;在此情况下,p便成为了悬垂指针,对*p的访问则构成了对非法内存的访问。

避免野指针

1.指针要进行初始化

指针要有初始值,初始化为NULL,或者有具体的指向。

既然NULL无法执行解引用动作c语言空怎么表示,那么为何指针可以被设定为NULL值?将指针初始化为NULL,其目的仅是赋予它一个指向,然而在实际应用中空类型指针、空指针、野指针,我们无法对NULL进行解引用,因此在使用指针前必须进行有效性检验。

2.使用指针之前要进行有效性判断

在运用指针前,务必确认其是否为空指针,若是空指针,则不得执行解引用动作。

3.避免越界访问

不要进行越界访问操作,即使还是访问不改变值也是非法的

4.不要返回局部变量的地址

当函数执行完毕后,其局部变量空间会被操作系统收回,若此时函数返回了局部变量的地址,那么在函数外部接收该返回值的指针就会变成无效指针。

5.当指针指向的空间释放后,要将该指针置为NULL

通过这种方式,我们能够防止对野指针进行解引用,并且还能有效防止对已动态分配的内存空间进行重复释放。

int main()
{
	int* p = (int*)malloc(10*sizeof(int));
	
	//1.判断有效性
	if (p == NULL)
	{
		return -1;
	}
	
	//2.使用指针
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		p[i] = i;
	}
	
	//3.释放指针指向的空间
	free(p);
	//free(p);//非法操作
	//4.指针置为NULL
	p = NULL;
	free(p);//释放空指针什么都不做
	return 0;
}

加入微信交流群:************ ,请猛戳这里→点击入群

扫描二维码推送至手机访问。

版权声明:本文由生活百事通发布,如需转载请注明出处。

本文链接:https://www.shbaishi.com/post/2762.html

分享给朋友:

“空类型指针、空指针、野指针” 的相关文章

音乐引领时尚

音乐引领时尚

在当今快节奏的生活中,音乐与时尚如同两颗璀璨的明珠,相互交织、相互辉映,为我们的生活注入了无尽的活力与个性。音乐,作为人类情感的表达和心灵的慰藉,能够触动我们最深处的弦;而时尚,则是一种生活态度和审美表达,展现着我们的个性与独特。当这两者相融合,便创造出了一个充满魅力的个性音乐空间。音乐与时尚在生活...

亲子运动会火爆开展,增强体质促进亲情

亲子运动会火爆开展,增强体质促进亲情

在阳光灿烂的日子里,一场别开生面的亲子运动会如火如荼地开展起来,这不仅是一场体育的盛宴,更是一次增强体质、促进亲情的美好契机。当清晨的第一缕阳光洒在运动场上,那充满活力的气息便扑面而来。家长们和孩子们早早地来到了场地,脸上洋溢着期待的笑容。五颜六色的运动服在阳光下闪烁着光芒,仿佛是一片绚丽的花海,为...

亲子手工坊兴起,激发孩子创造力与动手能力

亲子手工坊兴起,激发孩子创造力与动手能力

在当今快节奏的社会中,孩子们往往被各种电子设备和应试教育所包围,他们的创造力和动手能力逐渐被忽视。亲子手工坊的兴起,为孩子们提供了一个全新的学习和成长空间,让他们在亲身体验中激发无限的创造力与动手能力。亲子手工坊,顾名思义,就是父母与孩子一起参与手工制作的场所。在这里,孩子们可以与父母一起挑选材料、...

亲子瑜伽流行,帮助孩子提升专注力与柔韧性

亲子瑜伽流行,帮助孩子提升专注力与柔韧性

在当今快节奏的现代生活中,孩子们面临着各种压力和挑战,专注力和柔韧性的培养变得尤为重要。而亲子瑜伽作为一种新兴的运动方式,正逐渐受到家长和孩子们的喜爱。它不仅能够增进亲子关系,还能有效地帮助孩子提升专注力与柔韧性,为他们的成长打下坚实的基础。亲子瑜伽的流行并非偶然。相比于传统的瑜伽课程,亲子瑜伽更加...

如何引导孩子正确使用电子产品

如何引导孩子正确使用电子产品

在当今数字化时代,电子产品已成为孩子们生活中不可或缺的一部分。从平板电脑到智能手机,从电子游戏到在线学习平台,这些科技产品为孩子们带来了丰富的信息和娱乐,但同时也带来了一些挑战。如何引导孩子正确使用电子产品,成为了家长和教育者们共同关注的问题。家长要树立正确的榜样。孩子往往会模仿家长的行为,因此家长...

关注孩子心理健康从日常做起

关注孩子心理健康从日常做起

孩子是祖国的未来,他们的心理健康关乎着个人的发展、家庭的幸福以及社会的和谐。在如今快节奏、高压力的社会环境下,关注孩子心理健康已成为一项刻不容缓的任务,而这一切,都应从日常的点点滴滴做起。日常生活中的点滴细节,往往对孩子的心理健康有着深远的影响。营造一个温馨和谐的家庭氛围至关重要。一个充满爱与理解的...