忘记将 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");