背景:如图
函数体中声明了一个指针变量,遇到两个问题:
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