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->nextinitLinkedList.

于 2012-11-08T19:41:33.127 回答
2

正如@aib 所说,您没有初始化列表最后一项的“下一个”元素。

您应该在 malloc 之后将其初始化为 null。

问题是:当您遍历列表时,当您到达最后一项时,它的“下一个”值将未初始化,并且您可能会结束段错误,您必须将其初始化为 null 才能知道您已经到达列表的末尾。

于 2012-11-08T19:46:05.530 回答