Я реализую свой собственный malloc и столкнулся с небольшой проблемой с пустотой *
Когда я печатаю возвращаемые адреса в mem_alloc:
printf("Addr p = %p\n", (void *)(p+ 1));
это дает мне что-то вроде этого:
Addr p = 0x7f20f20b1050
Но когда я печатаю тот же возвращаемый указатель в mymain.c:
p1 = (int *)Mem_Alloc(40879);
printf("%p\n", p1);
Я получаю: 0xffffffffff20b1050 Это приводит к ошибке seg в моем 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);
}