【发布时间】:2014-03-03 00:49:40
【问题描述】:
我正在实现自己的 malloc,但遇到了 void* 的小问题
当我在 mem_alloc 中打印返回地址时:
printf("Addr p = %p\n", (void *)(p+ 1));
它给了我这样的东西:
Addr p = 0x7f20f20b1050
但是当我在 mymain.c 中打印相同的返回指针时:
p1 = (int *)Mem_Alloc(40879);
printf("%p\n", p1);
我得到:0xfffffffff20b1050 这导致我的 mem_free 出现段错误
我回来了:
return (void *)(p + 1);
我还收到了关于 mymain.c 的警告:mymain.c:10: 警告:从不同大小的整数转换为指针
我不明白的是为什么当我返回一个 void* 时它会变成整数类型
for (p = freep; p != NULL; prevp = p, p = p->ptr) {
if (p->size == size) {
if (prevp == NULL) {
freep = p->ptr;
} else {
prevp->ptr = p->ptr;
}
} else if (p->size > size) {
p->size = p->size - size;
p = (Header *)((char *)p + p->size);
p->size = size;
} else {
continue;
}
printf("Addr p = %p\n", (void *)(p+ 1));
return (void *)(p+1);
}
【问题讨论】:
-
你能发布分配函数,或者至少是它的相关部分吗?
标签: int return compiler-warnings void-pointers