与C的Malloc实施

  • 本文关键字:实施 Malloc 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;
}

基本上,我在另一种称为Mem_Init的方法中调用mmap;然后,返回的存储映射由变量head指向。我总是会在Mem_Alloc中间的评论部分上得到细分故障。我不知道为什么。你们能帮我吗?一些提示?

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

您可以使用:

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

不可能确定,但这很可能是因为您期望通过p->size字节来增加p += p->sizep。实际上,这将以p->size*p的大小增加。如果您要分配的大小小于可用内存的一半,那么即使*p仅为2个字节,这也会将指针移至端。

要解决此问题,您应该将指针投入到添加的角色指针。

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

相关内容

  • 没有找到相关文章

最新更新