關於Linux 下C函數free()的作用
2014-04-18 来自:zyffeng 1 人回应

free()的作用不是將malloc()分配的內存空間重新分配到內存池中嗎?那調用free之後,那應該分配的所有的數據應該都消失才對吧?但是我在<C Primer plus>上,看到一個例子上這樣寫的:

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

這個代碼經測試是通過的,我嘗試打印出current->next和current->其他數值,指向next指針的數據可以打印出來,但是其他數據卻打印不出來,,

這是爲什麼啊???爲什麼free()之後,還有數據存在呢????
(我也不知道爲什麼是繁體字,,ubuntu系統,各位將就一下唄,,)

2014-04-23 来自:不吃不舒服斯基

翻了下书, 还真是看到了这段代码...
这难道不算大bug么... 还是我c功力不够

free后有数据存在这个没啥, free的实现一般不会去清除 内存中的内容. 但是如果在free(current);和current=current->next;间有别的进程或线程去 更新了这段内存, 程序可能会直接挂掉吧

google了一把:
http://stackoverflow.com/questions/21974685/code-safety-in-c-programming-avoiding-any-segmentation-errors
http://blog.csdn.net/fudanjiangwu/article/details/8120906

您的回应

你还未登陆,不能回应!登陆