5个回答
推荐于2016-09-28
展开全部
7.5 free 和 delete 把指针怎么啦?
别看 free 和 delete 的名字恶狠狠的(尤其是 delete) ,它们只是把指针所指的内存给
释放掉,但并没有把指针本身干掉。
用调试器跟踪示例 7-5,发现指针 p 被 free 以后其地址仍然不变(非 NULL) ,只是
该地址对应的内存是垃圾,p 成了“野指针” 。如果此时不把 p 设置为 NULL,会让人误
以为 p 是个合法的指针。
如果程序比较长,我们有时记不住 p 所指的内存是否已经被释放,在继续使用 p 之
前,通常会用语句 if (p != NULL)进行防错处理。很遗憾,此时 if 语句起不到防错作用,
因为即便 p 不是 NULL 指针,它也不指向合法的内存块。
char *p = (char *) malloc(100);
strcpy(p, “hello”);
free(p); // p 所指的内存被释放,但是 p 所指的地址仍然不变
…
if(p != NULL) // 没有起到防错作用
{
strcpy(p, “world”); // 出错
}
示例 7-5 p 成为野指针
7.6 动态内存会被自动释放吗?
7.7 杜绝“野指针”
7.8 有了 malloc/free 为什么还要 new/delete ?
7.9 内存耗尽怎么办?
7.10 malloc/free 的使用要点
7.11 new/delete 的使用要点
7.12 一些心得体会
参考文献:
高质量 C++/C 编程指南 - 林锐 2001
别看 free 和 delete 的名字恶狠狠的(尤其是 delete) ,它们只是把指针所指的内存给
释放掉,但并没有把指针本身干掉。
用调试器跟踪示例 7-5,发现指针 p 被 free 以后其地址仍然不变(非 NULL) ,只是
该地址对应的内存是垃圾,p 成了“野指针” 。如果此时不把 p 设置为 NULL,会让人误
以为 p 是个合法的指针。
如果程序比较长,我们有时记不住 p 所指的内存是否已经被释放,在继续使用 p 之
前,通常会用语句 if (p != NULL)进行防错处理。很遗憾,此时 if 语句起不到防错作用,
因为即便 p 不是 NULL 指针,它也不指向合法的内存块。
char *p = (char *) malloc(100);
strcpy(p, “hello”);
free(p); // p 所指的内存被释放,但是 p 所指的地址仍然不变
…
if(p != NULL) // 没有起到防错作用
{
strcpy(p, “world”); // 出错
}
示例 7-5 p 成为野指针
7.6 动态内存会被自动释放吗?
7.7 杜绝“野指针”
7.8 有了 malloc/free 为什么还要 new/delete ?
7.9 内存耗尽怎么办?
7.10 malloc/free 的使用要点
7.11 new/delete 的使用要点
7.12 一些心得体会
参考文献:
高质量 C++/C 编程指南 - 林锐 2001
展开全部
养成好习惯,在堆上分配的内存不用的时候要记得释放,不然它们占据的空间会越来越大,
另外,保存好指针的值,否则可能永远都释放不了了。
当你用free释放一片内存之后,操作系统可能不会真正的收回,当你下一次用malloc分配内存的时候如果大小刚好,它会把你刚释放掉的内存分配给你。
当程序结束后,操作系统会回收所有程序所占用的内存空间,包括堆,数据段,代码段等。
另外,保存好指针的值,否则可能永远都释放不了了。
当你用free释放一片内存之后,操作系统可能不会真正的收回,当你下一次用malloc分配内存的时候如果大小刚好,它会把你刚释放掉的内存分配给你。
当程序结束后,操作系统会回收所有程序所占用的内存空间,包括堆,数据段,代码段等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
malloc()分配后,当不再用到的时候记得用free()去释放内存,否则会一直占用内存,导致内存泄露,最后内存越来越少。重启机器后内存会释放。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序结束 自己没. 用不着怕
除非你一直开着那个申请内存的程序.
不然等你关了程序, 系统会自动回收他所申请的资源
除非你一直开着那个申请内存的程序.
不然等你关了程序, 系统会自动回收他所申请的资源
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用管 程序运行结束,操作系统会自动回收提供给该程序的资源,
但是有些程序可能会一直运行下去,因此要求不要忘记用free释放内存
但是有些程序可能会一直运行下去,因此要求不要忘记用free释放内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询