Home | History | Annotate | Download | only in tests
      1 /**
      2  * @brief Repeatedly allocate and free memory. Tests whether drd really frees
      3  *        memory allocated by a client. See also
      4  *        http://bugs.kde.org/show_bug.cgi?id=161036.
      5  */
      6 
      7 #include <assert.h>
      8 #include <stdlib.h>
      9 
     10 int main()
     11 {
     12   int i;
     13   void* p;
     14 
     15   for (i = 0; i < 100000; i++)
     16     free(malloc(40960));
     17 
     18   for (i = 0; i < 100000; i++)
     19   {
     20     p = realloc(NULL, 40960);
     21     p = realloc(p, 50000);
     22     p = realloc(p, 40000);
     23     p = realloc(p, 0);
     24     /*
     25      * glibc returns a NULL pointer when the size argument passed to realloc()
     26      * is zero, while Darwin's C library returns a non-NULL pointer. Both are
     27      * allowed by POSIX.
     28      */
     29 #if defined(__APPLE__)
     30     if (p)
     31       free(p);
     32 #else
     33     assert(! p);
     34 #endif
     35   }
     36 
     37   return 0;
     38 }
     39