忘記將 realloc 的返回值複製到臨時值

如果 realloc 失敗,則返回 NULL。如果將原始緩衝區的值分配給 realloc 的返回值,並且如果它返回 NULL,則原始緩衝區(舊指標)將丟失,從而導致記憶體洩漏 。解決方案是複製到臨時指標,如果該臨時不是 NULL,複製到實際緩衝區。

char *buf, *tmp;

buf = malloc(...);
...

/* WRONG */
if ((buf = realloc(buf, 16)) == NULL)
    perror("realloc");

/* RIGHT */
if ((tmp = realloc(buf, 16)) != NULL)
    buf = tmp;
else
    perror("realloc");