我正在尝试创建一个空闲列表来实现堆分配器。到目前为止,这是我定义结构的方式:
typedef struct headerT headerT;
struct headerT{
size_t payloadSize;
struct headerT* next; // unused field to make struct 8 bytes, simplifies alignment
};
headerT* freeList;
下面是我如何初始化我的堆:
int myinit()
{
freeList = InitHeapSegment(0); // InitHeapSegment resets heap segment to empty, no pages
//allocated
freeList->payloadSize = 0;
freeList->next=NULL;
return 0;
}
当函数试图将负载大小更改为零时,我立即收到段错误。我在这里缺少什么?
最佳答案
问题出在这里:
freeList = InitHeapSegment(0); // InitHeapSegment resets heap segment to empty, no pages
//allocated
您说 InitHeapSegment
将堆段“重置”为空,但没有分配页面。可能不是 malloc()
ing。因此,freeList
可能指向您无权访问的垃圾值,从而给您带来 SIGSEGV 或 SEGMENTATION VIOLATION 错误。在 Windows 中,此错误的类型为 Cx00000005
关于c - 访问结构成员时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618289/