/** * @brief Repeatedly allocate and free memory. Tests whether drd really frees * memory allocated by a client. See also * http://bugs.kde.org/show_bug.cgi?id=161036. */ #include <assert.h> #include <stdlib.h> int main() { int i; void* p; for (i = 0; i < 100000; i++) free(malloc(40960)); for (i = 0; i < 100000; i++) { p = realloc(NULL, 40960); p = realloc(p, 50000); p = realloc(p, 40000); p = realloc(p, 0); /* * glibc returns a NULL pointer when the size argument passed to realloc() * is zero, while Darwin's C library returns a non-NULL pointer. Both are * allowed by POSIX. */ #if defined(VGO_darwin) if (p) free(p); #else assert(! p); #endif } return 0; }