1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #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;
- }
- }
- realloc(lp, 0);
-
- 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);
- }
|