次のブロックは、メモリ リークを引き起こします。
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*/
}
1ブロックで120バイトが確実に失われている…
...getline (getline.c:34)
を追加することでこれを修正できますfree()
:
while ((read = getline(&line, &len, fp)) != -1) {
/*Do something*/
}
free(line);
私の質問は、なぜ失敗したときにgetline
メモリを割り当てるのですか? line
そして、なぜ私はfree(line)
すべての呼び出しに対してする必要がないのgetline
ですか?