2

なぜこのエラーが発生するのかわかりません。valgrind を実行すると、newNode = (NodeType *)malloc(sizeof(NodeType)); と表示されます。エラーを作成していますが、理由がわかりません...基本的に私がやろうとしているのは、渡されたサイズ n のリンクリストを初期化し、最初のノードにヘッドを設定することです。

typedef struct {
  int number;
  AnotherNodeType *anotherLinkedList;
} Type;

typedef struct Node{
  Type *data;
  struct Node *next;
} NodeType;


int main(){
  NodeType *nodePointer = NULL;
  initLinkedList(&nodePointer, 10);
  return 0;
}

void initLinkedList(NodeType **nodePointer, int n){
  int i;
  NodeType *prevNode, *newNode;
  prevNode = NULL;
  for (i = 0; i < n; i++){
    newNode = (NodeType *)malloc(sizeof(NodeType));
    newNode->data = (Type *)malloc(sizeof(Type));
    newNode->data->number = i;
    newNode->data->anotherLinkedList = NULL;
    if (prevNode == NULL){
      *nodePointer = newNode;
    }
    else{
      prevNode->next = newNode;
    }
    prevNode = newNode;
  }
}
4

2 に答える 2

2

で初期化newNode->nextしていないinitLinkedList

于 2012-11-08T19:41:33.127 に答える
2

@aibが言ったように、リストの最後の項目の「次の」要素を初期化していません。

malloc の直後に null に初期化する必要があります。

問題は次のとおりです:リストをループするとき、最後の項目に到達すると、その「次の」値が初期化されず、おそらくセグメンテーション違反を終了します。これをnullに初期化して、到達したことを知る必要がありますリストの終わり。

于 2012-11-08T19:46:05.530 に答える