在用户数据区开始之前,使用malloc分配的内存块中存在一些 header 内容。
buffer = (char*) (malloc (i));
int j;
for(j=1;j<9;j++){
printf("before data: %d\n",*(buffer-j));
输出我得到的是 数据前:0 数据前:0 数据前:0 之前的数据:35 数据前:0 数据前:0 数据前:0 数据前:0
我想在 header 中有一个额外的字段,我将用它来设置一些值。我尝试修改 malloc.c 库来设置自定义 header ,但没有任何效果。我想知道是否有什么办法可以做到这一点。
最佳答案
当您尝试访问未分配的内存时,您的代码包含未定义的行为。在给定的平台上,内存分配器可能会将 header 放在分配的内存之前,但您不能依赖这样的情况。
创建您自己的内存解除分配例程以在之前添加更多空间,如下所示:
void *my_malloc(size_t s)
char *p = malloc(s+what_you_need);
if (p!=NULL) return (void *)(p+what_you_need);
return (void *)p;
}
void my_free(void *p) {
free(((char *)p)-what_you_need);
}
您还可以关注对齐要求。
关于c++ - 如何更改malloc.c头内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41950025/