Date: Thu, 15 Aug 2002 04:09:23 -0700 (PDT) From: Hovik Melikyan <hovik@melikyan.com> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/41684: realloc() to 0 loses 16 bytes of memory regardless of the previous block size Message-ID: <200208151109.g7FB9NMM063962@www.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 41684
>Category: misc
>Synopsis: realloc() to 0 loses 16 bytes of memory regardless of the previous block size
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Aug 15 04:10:02 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Hovik Melikyan
>Release: 4.6-RELEASE, also 4.5-PRERELEASE
>Organization:
NetFlute.com
>Environment:
FreeBSD london.imc.am 4.6-RELEASE FreeBSD 4.6-RELEASE #0: Tue Jun 11 06:14:12 GMT 2002 murray@builder.freebsdmall.com:/usr/src/sys/compile/GENERIC i386
>Description:
realloc() with the size parameter set to 0 loses 16 bytes of memory regardless of the previous block size, e.g.
p = realloc(p, 0);
>How-To-Repeat:
run this program and watch its resources with top:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i, j;
void *p;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 1000; j++)
{
p = malloc(12345); /* the block size doesn't matter */
p = realloc(p, 0); /* replace this with free(p) to avoid memory leak */
/* here we lose 16 bytes of memory */
}
puts("Press any key:");
getchar();
}
return 0;
}
>Fix:
write your own wrapper for realloc() which would check the size parameter and call free() if it's 0.
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200208151109.g7FB9NMM063962>
