1 /* zz30 2 * 3 * demonstrate a splay-tree depth problem 4 */ 5 6 #include <stdlib.h> 7 #include <stdio.h> 8 #include <unistd.h> 9 10 #ifndef SCALE 11 #define SCALE 100000 12 #endif 13 14 15 struct list 16 { 17 struct list *next; 18 }; 19 20 21 int main()22main () 23 { 24 struct list *head = NULL; 25 struct list *tail = NULL; 26 struct list *p; 27 long n; 28 int direction; 29 30 for (direction = 0; direction < 2; direction++) 31 { 32 fprintf (stdout, "allocating\n"); 33 fflush (stdout); 34 35 for (n = 0; n < SCALE; ++n) 36 { 37 p = malloc (sizeof *p); 38 if (NULL == p) 39 { 40 fprintf (stdout, "malloc failed\n"); 41 break; 42 } 43 if (direction == 0) 44 { /* add at tail */ 45 p->next = NULL; 46 if (NULL != tail) 47 tail->next = p; 48 else 49 head = p; 50 tail = p; 51 } 52 else 53 { /* add at head */ 54 p->next = head; 55 if (NULL == tail) 56 tail = p; 57 head = p; 58 } 59 } 60 61 fprintf (stdout, "freeing\n"); 62 fflush (stdout); 63 64 while (NULL != head) 65 { 66 p = head; 67 head = head->next; 68 free (p); 69 } 70 71 } 72 73 fprintf (stdout, "done\n"); 74 fflush (stdout); 75 76 return (0); 77 } 78 79 /* { dg-output "allocating.*freeing.*allocating.*freeing.*done" } */ 80