使用指针数组时出现分段错误

时间:2015-03-20 07:06:19

标签: c arrays pointers malloc

我正在开发一个程序,其中使用malloc分配内存块,并使用指针将信息添加到内存块。我正在使用一个指针数组,因为指针的数量取决于块的大小,但每当我将信息添加到块时,我都会遇到一些问题。我不得不缩短我的代码,但基本上这就是它的样子

struct Header{
    int free;
    int size;
};

void* memory_allocator(int length){

    void* memoryBlock = malloc(length);

    //assuming that length is a multiple of 2
    int index = log2(length);

    Header** freeList = (Header**)malloc(sizeof(Header)*(index+1));
    freeList[index] = (Header*) memoryBlock;
    freeList[index]->size = length;
    freeList[index]->free = 1;

//Divide the memory block into chunks... This is where the problem happens
    for(int j=1; j <= index; j++){

        length = length/2;

        freeList[index-j] = (Header*)(((char*)freeList[index])+length);
        freeList[index-j]->size = length;
        freeList[index-j]->free = 1;
    }
}

我的问题开始在for循环中发生;它在第一次迭代时工作正常,但每当它到达第二次迭代时它就会发生分段错误。如果它有帮助,我用来测试它的数字是512。有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:1)

malloc的块未使用NULL初始化。您可能尝试取消引用单元化指针。

改用calloc。该块将初始化为NULL。

Header** freeList = calloc(index+1, sizeof(Header*));

您还要为每个块插入重新定位空闲列表。这真的是你想要的吗?