C 访问结构成员时出现SEGFULT
我试图创建一个空闲列表来实现堆分配器。到目前为止,我是如何定义结构的:C 访问结构成员时出现SEGFULT,c,pointers,struct,heap,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* freeL
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;
}
当函数试图将有效负载大小更改为零时,我立即收到segfault。我在这里遗漏了什么?问题在于:
freeList = InitHeapSegment(0); // InitHeapSegment resets heap segment to empty, no pages
//allocated
您说InitHeapSegment将堆段重置为空,但没有分配任何页面。可能不是马洛辛。因此,freeList可能会指向您无权访问的垃圾值,从而导致SIGSEGV或分段冲突错误。在Windows中,此错误的类型为Cx00000005freeList崩溃时的值是多少?请添加InitHeapSegment的代码。传递0时它返回什么?如何从正在分配的InitHeapSegment返回struct HeaderT?