0

我正在尝试创建一个空闲列表来实现堆分配器。到目前为止,这是我定义结构的方式:

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;
}

当函数尝试将有效负载大小更改为零时,我立即收到段错误。我在这里想念什么?

4

1 回答 1

0

问题在这里:

 freeList = InitHeapSegment(0); // InitHeapSegment resets heap segment to empty, no pages                                                  
                              //allocated     

你说InitHeapSegment“重置”堆段为空,但没有分配页面。可能它没有malloc()。因此freeList可能指向您无权访问的垃圾值,从而给您一个 SIGSEGV 或 SEGMENTATION VIOLATION 错误。在 Windows 中,此错误的类型为 Cx00000005

于 2012-11-29T03:27:08.323 回答