使用下面的代码,我正在尝试编写一个包装器,calloc()
以便我可以通过将大小存储在分配内存的第一个 2/4 字节中来跟踪分配的堆内存。当我单独测试时,它似乎没问题。但是,当我将它替换为我的系统时calloc()
,它会产生问题......有时意味着它会返回NULL
,即使有很多可用的堆。
我正在使用 IAR 编译器在 ARM 板上运行它:
void *MyCalloc(size_t size) {
size_t new_size = ((size + 3) & ~0x3);
size_t *result = calloc(1,new_size + sizeof(size_t));
if ( result ) {
printf("MyCalloc addr: %p\n", result);
*result = (new_size + sizeof(size_t));
result = result + sizeof(size_t);
}
return result;
}
知道为什么这会导致问题吗?