函数体中声明的指针变量控制不了

本文探讨了在函数体中声明指针变量时遇到的问题,包括地址0x00000000的非控制地址,以及如何正确初始化指针并理解NULL的作用。着重讲解了未初始化指针的默认值,NULL与内存访问权限的关系,以及在内存管理中释放后的指针处理原则。
摘要由CSDN通过智能技术生成

背景:如图
在这里插入图片描述
函数体中声明了一个指针变量,遇到两个问题:
1.地址0x00000000,明显非控制的地址
2.下面测试给指针首地址赋值,赋值失败

原因:
所有的变量不赋初值的情况下,是空值,例如int char类的为0,指针的话就是NULL,所以UINT8_t *send_data;相当于UINT8_t *send_data=NULL
2.p=NULL: p 指向了一个地址为0的内存,NULL就是0x0。p=NULL后,p指向0x0这个地址。此处的地址,没有访问权限
3.当用new或者malloc申请了指针p,使用后delete或者free,这个时候必须将指针值设置为null,否则,p将成为一个非法指针,后续代码如果使用到该指针有可能会造成系统崩溃(内存不可以读不可写),或者,破坏自身有效内存数据(释放后,又在申请作为别的用途,恰巧系统分配了同一块内存)
原因:free(p)是只是将malloc申请的内存空间释放,在不改变free()函数的原型前提下是无法做到P=NULL的,P=NULL相当于空指针,不指向任何有效的对象。绝对不允许间接使用空指针,否则程序会得到毫无用处的结果或者全部是零的值,或者会突然停止。P=null,之后,p还是原来的类型的,不变的。
————————————————
参考链接:https://blog.csdn.net/henu1710252658/article/details/83046649

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值