Khối sau gây ra rò rỉ bộ nhớ:Tôi có cần gọi miễn phí() sau một đường dây bị lỗi() không?
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 byte trong 1 khối chắc chắn bị mất ...
... getline (getline.c: 34)
Tôi có thể sửa lỗi này bằng cách thêm một số free()
:
while ((read = getline(&line, &len, fp)) != -1) {
/*Do something*/
}
free(line);
Câu hỏi của tôi là: Tại sao getline
cấp phát bộ nhớ cho line
khi không thành công? Và tại sao tôi không cần phải free(line)
cho mỗi cuộc gọi đến getline
?
+1 'man 3 getline', mặc dù khá mơ hồ, không đảm bảo về việc phải * thành công * để cấp phát bộ đệm. Nó chỉ đơn giản là đọc * "Nếu * lineptr là NULL, sau đó' getline() 'sẽ cấp phát một bộ đệm để lưu trữ các dòng, mà nên được giải phóng bởi chương trình người dùng." * – WhozCraig