问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中, 为了避免野指针,是不是可以在free和delete之后,把指针置为NULL就可以避免了?

发布网友 发布时间:2022-04-15 03:56

我来回答

8个回答

懂视网 时间:2022-04-15 08:17

调研:t_zset删除操作 zslDelete(zs-zsl,score,c-argv[j]) int zslDelete(zskiplist *zsl, double score, robj *obj) void zslDeleteNode(zskiplist *zsl, zskiplistNode *x, zskiplistNode **update) void zslFreeNode(zskiplistNode *node zskiplistNode *

调研:t_zset删除操作
zslDelete(zs->zsl,score,c->argv[j])
int zslDelete(zskiplist *zsl, double score, robj *obj)
void zslDeleteNode(zskiplist *zsl, zskiplistNode *x, zskiplistNode **update)
void zslFreeNode(zskiplistNode *node
这里写图片描述

这里写图片描述

这里写图片描述
zskiplistNode *node中的成员都能访问,说明zfree(node)并没有释放node, 什么时候实现回收。实际上,free(ptr)告诉操作系统回收*ptr空间(如:将该空闲块链接到可用链表),但是该块的内容并未清空,故使用ptr仍能访问*ptr空间。

注意:当ptr1和ptr2同时指向zskiplistNode时,通过zfree(ptr1)告诉操作系统回收*ptr1(zskiplistNode),但是ptr2仍然指向zskiplistNode这片空间,所以ptr2仍能访问zskiplistNode的内容。

这里写图片描述

内存泄露,链表删除节点,使用free(ptr),和ptr = NULL之间的关系,free仅告诉os回收资源,而ptr指针仍存放这片空间的地址,指向这片空间,如果未设置读写保护,ptr依旧能访问这片空间的内容;所以free(ptr)之后,显式设置ptr为NULL,避免出现不可预期的错误(读到不该读的或写入不该写的空间)。
这里写图片描述
这里写图片描述
这里写图片描述

冒号表达式使用
这里写图片描述
lr > 0?pnode->rchild:pnode->lchild = NULL;
必须使用int i = (boolean expression)? A:B;

热心网友 时间:2022-04-15 05:25

我觉得你说得对,因为free/delete只是删除由程序员自己分配的内存空间,但是指针本身还是要占用内存空间的,它可以指向新的内容,比如
char *ch = new char [10];
……
delete [] ch;
之后,仍然可以打印ch和*ch,但是最后加上一行
ch = NULL;
之后,再对ch进行操作就会提示内存访问错误,"violation access…"
所以把不用的指针置为NULL是可取的。

热心网友 时间:2022-04-15 06:43

不是在free 和delete 之后 应该在定义时候 把指针置为NULL

热心网友 时间:2022-04-15 08:18

把指针置空确实可以有效的避免所谓“野指针”的出现

热心网友 时间:2022-04-15 10:09

定义的时候和调用free、delete之后都需要设成NULL

热心网友 时间:2022-04-15 12:17

void func()
{
char *pCh=NULL;
pCh=new char(20);
if(NULL!=pCh)
{
memset(pCh,0,sizeof(char)*20);
}

if(NULL!=pCh)
{
free(pCh);
pCh=NULL;
}
}

热心网友 时间:2022-04-15 14:42

1
int *p = NULL;
p = (int *)malloc(20);
free(p);
p = NULL;
2
int *p = (int *)malloc(20);
free(p);
p = NULL;

热心网友 时间:2022-04-15 17:23

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
四开大门要多少宽度 四开大门尺寸多少 大门四开门尺寸是多少 秦昊新剧《亲爱的小孩》网上褒贬不一,你觉得这部剧是否符合现实呢? 《亲爱的小孩》妻子产后失禁,丈夫嫌弃反复洗手,你怎么看? 求推荐一个安卓手机文档管理工具吧,手机实在太乱了,也没有介绍的? 手机文件管理器哪个好用 隐私文件夹app哪个好用 泰山茶年产600吨品牌近40个销售额达5亿元 山东茶叶品牌 山东茶叶厂家 山东有哪些茶叶品牌【品牌库】 从广延路到真如中学如何走? 冯保和魏忠贤两人谁的权力更大 魏忠贤为什么被称为 苹果7比苹果6splus大吗? 怎么通过qq注册新 用qq号可以申请吗? 用qq号可以申请吗? 用QQ号可以注册吗 我们孩子都上初中了,昨晚梦见自己还有一个两岁的女儿还叫我老公爸爸,是什么意思? 蓝色羽绒服水洗以后变白了,怎么办 羽绒服被洗白了,怎么办? 赣州的土地适合种植沙田柚吗!什么季节种比较有成活率! 什么样的动作可以使臀部变翘啊? 如何能收腹提臀 有没有既能提臀又能收腹的单个动作! 怎样收腹提臀? 百度网盘下载游戏过程中就被自动锁定了怎么回事? 如何解决“系统网络共享中心的高级共享设置中,设置启用网络发现,点击修改后还是处于关闭状态”的问题? 什么动作可以提臀收腹 如何运动收腹提臀 家庭组的两个电脑无法共享,我感觉主要是无法启用网络发现,请问如何解决, 经组什么词 几乎每个朝代都有太监,哪个朝代太监的地位是最高的? 便字加一个什么偏旁能组成一个新字 拌好的凉面放一晚上还能吃吗 如何将pdf文件另存为powerpoint文件 买回来的冷面没放冰箱外面放了一夜能吃吗? 苹果手机控制中心的3D touch图标点开后 触屏无法使用了 加偏旁组新字再组词。立___ ( )___ ( ... 隔夜的凉面能吃吗 求教啊,为啥我感觉我手机上3Dtouch用不了 凉面从中午放到晚上吃会对身体有影响吗? 换个部首组成新字便 给更加偏旁组成新字 凉面放在冰箱一天一夜还能吃么 OFFICE2007 制作完幻灯片,要保存成自动播放格式。点另存为 POWERPOINT放映(S)后,重新打开后还是编辑状 明朝的有名太监,哪个权谋最厉害 陷害内阁首辅的明朝宦官是谁,他最后的结局怎么样? 过了一夜的凉面还能吃吗 急求做好的凉面能放多久?头天晚上做的过一晚还能吃吗? 张居正和前辈魏忠贤谁更强 早上买的凉面,晚上能吃吗?