绝不能对非动态分配存储块使用free,也不能对同一块内存区同时用free释放两次,为什么?free函数原理是?
3个回答
展开全部
操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的malloc申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。
free:释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及realloc函数来再分配。
free两次不一定出问题,看人品。最好不要free两次
free:释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及realloc函数来再分配。
free两次不一定出问题,看人品。最好不要free两次
追问
free两次不一定出问题,我也觉得这样!那是教材上说的了,我觉得应该说是“不能对同一块已分配的内存区连续free一次以上”。看来free的原理就像你说的那样,如果那样,那么对同一块已分配的内存区连续free一次以上可能产生的最严重的后会是什么呢?操作系统会终止程序往下运行?还是操作系统会崩溃,然后死机?你觉得呢?
追答
结果未定义,要看内存的实际情况了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
free是释放程序开发人员,开辟的内存。操作系统为程序分配的内存,由操作系统管理,开发者不应处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询