#include <stdbool.h>
#include <stdlib.h>
#include <pthread.h>

struct S {
	int i, j, k, l, m, n;
};

void * CallingMalloc( void * arg __attribute__((unused)) ) {
	for ( volatile int i = 0; i < 10000; i += 1 ) {
		volatile int      * ip  = (volatile int      *)malloc( sizeof(   int  ) *   1 );
		volatile int      * aip = (volatile int      *)malloc( sizeof(   int  ) * 100 );
		volatile struct S * sp  = (volatile struct S *)malloc( sizeof(struct S) * 200 );

		sp->i = 0;
		sp->j = 1;
		sp->k = 2;
		sp->l = 3;
		sp->m = 4;
		sp->n = 5;
		for(int j = 0; j < 100; j++) {
			aip[j] = j;
		}
		*ip = i;

		free( (void*)sp );
		free( (void*)aip );
		free( (void*)ip );
	}
	return NULL;
}

int main() {
    while(true) {
	    pthread_t t[15];
	    for(int i = 0; i < 15; i++) {
		    pthread_create( &t[i], NULL, CallingMalloc, NULL );
	    }

	    for(int i = 0; i < 15; i++) {
		    pthread_join( t[i], NULL );
	    }
    }
}