3

我正在尝试在 C 项目中手动实现 Malloc。这是我的代码:

void *Mem_Alloc(int size) {
    struct Node *p, *prevp = head;

    if (fitPolicy == P_BESTFIT) {

    }

    if (fitPolicy == P_FIRSTFIT) {
        for (p = prevp->next; ;prevp = p, p = p->next) {
            if (p->size >= size) {
                if (p->size == size)
                    prevp->next = p->next;
                else {
                    p->size -= size;
                    p += p->size;
                    // p->size = size;
                }
                head = prevp;
                return (void *)(p+1);
            }
            if (p == head) {
                return NULL;
            }
        }
    }

    if (fitPolicy == P_WORSTFIT) {

    }
    return NULL;
}

基本上,我调用mmap了另一个名为Mem_Init;的方法。然后,返回的内存映射由变量 指向head。我总是在Mem_Alloc. 我不知道为什么。你们能帮我解决这个问题吗?一些提示?

4

2 回答 2

2

无法确定,但这很可能是因为您希望按字节p += p->size递增。实际上,这会将它的大小增加. 如果您尝试分配的大小小于可用内存大小的一半,即使只有 2 个字节,这也会将指针移到末尾。pp->sizep->size*p*p

要解决此问题,您应该将指针转换为要添加的字符指针。

((char*)p) += p->size;
于 2012-11-04T05:02:14.517 回答
2

ughoavgfhw 有正确的方向,但铸造左值是不合适的。

您可以使用:

void * tmp_p = (void *)p;
tmp_p += p->size;
p = (struct Node *)tmp_p;
于 2012-11-04T05:10:33.667 回答