访问struct成员时的Segfault

时间:2012-11-29 03:20:41

标签: c pointers struct heap

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

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

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

1 个答案:

答案 0 :(得分:0)

问题在于:

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

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