下列塊導致內存泄漏:在1塊getline()失敗後,我需要調用free()嗎?
FILE *fp = fopen(path, "r");
char *line = NULL;
size_t len = 0;
ssize_t read = -1;
while ((read = getline(&line, &len, fp)) != -1) {
/*Do something*/
}
120個字節肯定丟失...
...函數getline(getline.c:34)
我可以通過添加一個free()
來解決此問題:
while ((read = getline(&line, &len, fp)) != -1) {
/*Do something*/
}
free(line);
我的問題是:爲什麼getline
爲line
分配內存時失敗?爲什麼我不需要free(line)
每次調用getline
?
+1'man 3 getline',雖然相當模糊,但沒有任何關於它必須*成功分配緩衝區的權限。它只是讀取*「如果* lineptr爲NULL,則getline()'將分配一個緩衝區來存儲該行,這應該由用戶程序釋放。」* – WhozCraig 2013-04-25 00:35:27