您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 这样free可以吗?

这样free可以吗?

来源:网络整理     时间:2016/7/18 2:54:05     关键词:

关于网友提出的“ 这样free可以吗?”问题疑问,本网通过在网上对“ 这样free可以吗?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 这样free可以吗?
描述:


while(current != NULL)
     {
          free(current);
         current = current->next;
      } 

C Primer Plus 上面的一段代码,编译链接运行都没有报错,可是我却很怀疑这段代码的正确性。
既然已经free(current)了,为什么下面还可以使用current->next?
如果说free只是告诉系统这块内存可以使用了,而并没有立即使用,那么它是怎么告诉的,请熟悉底层
细节的详细解说一下。
解决方案1:

书中弄错了。。我看的时候也碰到,你改成


while(current != NULL)
{
temp = current->next;
free(current);
current = temp;
}
解决方案2:

free不会去把指针指向的内容作任何修改,他只会在内存中把一些标记改了,使得这个内存能被malloc重新分配,在下一次malloc之前,这段代码就没问题。在单线程程序中,由于malloc不可能在跳出此函数之前被调用,因此代码总是安全的。但是在多线程程序中,则不能保证。
“一般不会出问题”依赖编译器的内存管理模块的实现,一些特定模块可能修改内容,那么你这个代码就会出错了
2, 8 , 11楼虽然在尝试修正问题,但是显然不明白把current赋值给tmp不会对此问题有任何改善,保存current->next而不是current才是正确的

引用 7 楼 jialejiahi 的回复:
可是我想知道free()是怎么实现的,为什么一般不会出问题。
解决方案3:

不可以,current被free以后,再用current = current->next; 可能有问题
可以先用中间值保存current->next; 然后再赋给current


以上介绍了“ 这样free可以吗?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2760561.html

相关图片

相关文章