| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| |
| struct list { |
| struct list *next; |
| }; |
| |
| int main(void) |
| { |
| int z=999; |
| int *y=&z; |
| int *x=NULL; |
| struct list *save; |
| struct list *lp; |
| int i; |
| |
| |
| printf("pointer to x is %p\n", x); |
| printf("pointer to y is %p\n", y); |
| x=malloc(sizeof(int)*2000); |
| printf("pointer to x is %p\n", x); |
| y=malloc(sizeof(int)*100); |
| printf("pointer to y is %p\n", y); |
| free(x); |
| free(y); |
| printf("about to free(0)\n"); |
| free(0); |
| |
| x=malloc(13); |
| printf("x = %p\n", x); |
| memcpy(x, "Small string", 13); |
| printf("0x%p test string1: %s\n", x, (char *)x); |
| y = realloc(x, 36); |
| printf("0x%p test string1: %s\n", y, (char *)y); |
| memcpy(y, "********** Larger string **********", 36); |
| printf("0x%p test string2: %s\n", y, (char *)y); |
| free(y); |
| |
| |
| printf("Allocate 100 nodes 500 bytes each\n"); |
| save = 0; |
| for (i=0; i<100; i++) { |
| lp = malloc(500); |
| if (lp == 0) { |
| printf("loop 1: malloc returned 0\n"); |
| goto Failed; |
| } |
| lp->next = save; |
| save = lp; |
| } |
| |
| printf("freeing 100 nodes\n"); |
| while (save) { |
| lp = save; |
| save = save->next; |
| free(lp); |
| } |
| |
| printf("try realloc 100 times \n"); |
| lp = 0; |
| for (i=1; i<=100; i++) { |
| lp = realloc(lp, i*200); |
| if (lp == 0) { |
| printf("loop 3: realloc returned 0\n"); |
| goto Failed; |
| } |
| } |
| { |
| void *unused_ret = realloc(lp, 0); |
| (void) unused_ret; |
| } |
| |
| printf("Allocate another 100 nodes 600 bytes each\n"); |
| save = 0; |
| for (i=0; i<100; i++) { |
| lp = malloc(600); |
| if (lp == 0) { |
| printf("loop 2: malloc returned 0\n"); |
| goto Failed; |
| } |
| lp->next = save; |
| save = lp; |
| } |
| |
| printf("freeing 100 nodes\n"); |
| while (save) { |
| lp = save; |
| save = save->next; |
| free(lp); |
| } |
| |
| |
| printf("alloc test PASSED\n"); |
| exit(0); |
| |
| Failed: |
| printf("!!!!!!!!!!!! alloc test FAILED. !!!!!!!!!!!!!!!\n"); |
| exit(1); |
| } |