gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:22:38 24 4
gpt4 key购买 nike

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

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(如果有帮助的话)。有人可以指出我做错了什么吗?

最佳答案

您 malloc 的 block 未用 NULL 初始化。您可能尝试取消引用未初始化的指针。

改用calloc。该 block 将被初始化为 NULL。

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

您还为每个 block 插入重新分配空闲列表。这真的是你想要的吗?

关于c - 使用指针数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29161189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com