忘記將 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");