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またはSEGMENTATIONVIOLATIONエラーが発生します。Windowsでは、このエラーのタイプはCx00000005です。

于 2012-11-29T03:27:08.323 に答える