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