我正在尝试创建一个空闲列表来实现堆分配器。这是我到目前为止定义结构的方式:
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;
}
当函数尝试将有效负载大小更改为零时,我立即得到段错误。我在这里缺少什么?
答案 0 :(得分:0)
问题在于:
freeList = InitHeapSegment(0); // InitHeapSegment resets heap segment to empty, no pages
//allocated
你说InitHeapSegment
“将”堆段重置为空,但没有分配页面。可能不是malloc()
。因此freeList
可能指向您没有访问权限的垃圾值,从而导致SIGSEGV或SEGMENTATION VIOLATION错误。在Windows中,此错误的类型为Cx00000005