#include <stdio.h> #include <sc.h> #include <threads.h> #include <sc_memory.h> void mhandler(sc_memory* meminfo, const char* msg) { (void) meminfo; printf("m line=%d, size=%d, %s\n", meminfo->line, meminfo->size, msg); } void fhandler(sc_memory* meminfo, const char* msg) { (void) meminfo; printf("f line=%d, size=%d, %s\n", meminfo->line, meminfo->size, msg); } void ehandler(sc_memory* meminfo, const char* msg) { (void) meminfo; printf("e %s\n", msg); } int func(void* v) { int* val = (int*) v; printf("call %d\n", *val); int* x = (int*) malloc(sizeof(int)); *x = *val; thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); free(x); return 0; } int counter = 0; void entries(sc_memory* entry) { counter++; (void) entry; } int main(void) { //sc_memory_mhandler = mhandler; //sc_memory_fhandler = fhandler; //sc_memory_ehandler = ehandler; /* char* ptr = malloc(10); *ptr = 'A'; printf("%c\n", *ptr); char* ptr2 = (char*) realloc(ptr, 20); ptr2[1] = 'B'; printf("%c\n", *ptr); // free(ptr2); char* ptr3 = (char*) malloc(3); *ptr3 = 'X'; int* ptr4 = (int*) malloc(5); *ptr4 = 0x1234567; */ thrd_t t[100]; int v[100]; for (int i = 0; i < 100; i++) { v[i] = i; thrd_create(&t[i], func, &v[i]); } for (int i = 0; i < 100; i++) { thrd_join(t[i], NULL); } // sc_memory_entries(sc_memory_dump_entry); sc_memory_entries(entries); printf("counter = %d\n", counter); return 0; }