#define DEBUG #include #include #include "../include/mem.h" int mem_is_zero(const void *ptr, size_t nbytes) { assert(ptr); assert(nbytes > 0); static const unsigned char zero_block[1024] = {0}; while (nbytes >= sizeof(zero_block)) { if (memcmp(ptr, zero_block, sizeof(zero_block)) != 0) return 0; ptr = (const unsigned char *)ptr + sizeof(zero_block); nbytes -= sizeof(zero_block); } if (nbytes > 0 && memcmp(ptr, zero_block, nbytes) != 0) return 0; return 1; } int main(void){ size_t nbytes = 4096; void *tmp = malloc(nbytes); memset(tmp, 0xAB, nbytes); free(tmp); void *ptr = ALLOC(nbytes); // likely gets the same region back assert(!mem_is_zero(ptr, nbytes)); // FAILS — 0xAB still there assert(ptr != NULL); return EXIT_SUCCESS; }