使用C实现Malloc

时间:2012-11-04 04:46:50

标签: c malloc

我正在尝试在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中间的注释部分上出现分段错误。我不知道为什么。你能帮助我吗?一些提示?

2 个答案:

答案 0 :(得分:2)

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

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

((char*)p) += p->size;

答案 1 :(得分:2)

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

您可以使用:

void * tmp_p = (void *)p;
tmp_p += p->size;
p = (struct Node *)tmp_p;