| /** |
| * @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; |
| } |