我正在开发一个程序,其中使用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。有人可以指出我做错了吗?
答案 0 :(得分:1)
malloc的块未使用NULL初始化。您可能尝试取消引用单元化指针。
改用calloc。该块将初始化为NULL。
Header** freeList = calloc(index+1, sizeof(Header*));
您还要为每个块插入重新定位空闲列表。这真的是你想要的吗?