c - 访问结构成员时出现段错误

标签 c pointers struct heap-memory

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

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/

相关文章:

c - 读取数组并使用 C 中的查找表显示结果

union 体可以在声明中初始化吗?

c - 从外部链接函数返回指针使程序崩溃

c - 如何从非文本文件中读取、修改结构?

C CUDA 从设备向主机发送结构数组

c - malloc 在 c 中但使用 2d 语法...编译没有答案

c - 内存是在函数结束时用 malloc 分配还是用 calloc 释放?

c - C中的嵌套动态结构?

c++ - 在结构中存储 COM 指针

c - 为什么 Linux 内核中有 ktime_get 的粗略变体?