C -Valgrind:跳跃或移动取决于分配内存时非初始化的值



我似乎无法弄清楚为什么会遇到此错误。我运行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;
  }
}

您不是在initLinkedList中初始化newNode->next

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

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

问题是:当您将循环循环列表时,当您到达最后一项时,它的"下一个"值将是非初始化的,您可能会结束segfault,您必须将其启动到null才能知道您'VE到达列表的末端。

最新更新