C/C++指针本身的内存占用及指向的内存问题(野指针等)

本文探讨C/C++中指针内存占用情况,包括指针在栈上的分配以及指向栈和堆空间的区别。强调了野指针的概念,指出某些编译器可能在未初始化时赋予指针随机值。详细阐述了如何通过动态分配和释放内存避免野指针问题,并提供程序实例展示指针释放后如何进行置空操作,确保安全使用。
摘要由CSDN通过智能技术生成

C/C++指针本身的内存占用及指向的内存问题(野指针等)

指针在声明的时候,会在栈上面给他分配一块内存

例如:

int *p

这个时候编译器在栈上面分配了一块空间出来用来存p的值,但是p的值目前并没有指向任何东西,这种时候得看编译器如何操作,有些编译器会随机分配一个p的值并且编译时不会报错,那么现在p就是所谓的“野指针”,使用起来会出现大问题。但有些编译器会直接在编译阶段就会报错,那么p会无法使用。

想使用这个p,有两种方法,一种是让他指向堆空间,一种是让他指向栈空间,例如:

指向栈空间:

int *p;
int a;
p = &a;

指向堆空间

int *p;
p = malloc(); 

其中指向堆空间的内存一定要自己进行释放,释放完之后并不是说在栈上的p的空间也没了,p还能继续使用,只是原本指向的那块堆空间被系统收了回去。

需要注意的一点是,p此时还指向着被释放掉的那一块地址,如果此时再调用p,则会出现野指针的问题,因此在释放内存的时候最好再将指针进行置空操作:

free(p);
p = NULL;

实际写代码时可以为了阅读方便撰写一个函数来进行释放,这个地方可以用一个指针的引用:

void releaseMemory(int *&p){
	delete(p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值