#pragma once #include #include void* memdup(void *buf, size_t num); void* check_after_allocation(const char *funcname, void *ptr); #define malloc(num, type) \ ((type*)check_after_allocation("malloc", malloc((num)*sizeof(type)))) #define calloc(num, type) \ ((type*)check_after_allocation("calloc", calloc((num), sizeof(type)))) #define realloc(ptr, num, type) \ ((type*)check_after_allocation("realloc", realloc(ptr, (num)*sizeof(type)))) #define strdup(str) \ ((char*)check_after_allocation("strdup", strdup((str)))) #define memdup(buf, num) \ ((char*)check_after_allocation("memdup", memdup((void*)(buf), (num))))