| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | #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);}
 |