/* zz30 * * demonstrate a splay-tree depth problem */ #include #include #include #ifndef SCALE #define SCALE 100000 #endif struct list { struct list *next; }; int main () { struct list *head = NULL; struct list *tail = NULL; struct list *p; long n; int direction; for (direction = 0; direction < 2; direction++) { fprintf (stdout, "allocating\n"); fflush (stdout); for (n = 0; n < SCALE; ++n) { p = malloc (sizeof *p); if (NULL == p) { fprintf (stdout, "malloc failed\n"); break; } if (direction == 0) { /* add at tail */ p->next = NULL; if (NULL != tail) tail->next = p; else head = p; tail = p; } else { /* add at head */ p->next = head; if (NULL == tail) tail = p; head = p; } } fprintf (stdout, "freeing\n"); fflush (stdout); while (NULL != head) { p = head; head = head->next; free (p); } } fprintf (stdout, "done\n"); fflush (stdout); return (0); } /* { dg-output "allocating.*freeing.*allocating.*freeing.*done" } */