簡體   English   中英

Valgrind:分配內存時跳轉或移動取決於未初始化的值

[英]Valgrind: jump or move depends on uninitialised values when allocating memory

我似乎無法弄清楚為什么會出現此錯誤。 我運行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所說,您沒有初始化列表最后一項的'next'元素。

您應該在malloc之后將其初始化為null。

問題是:當您遍歷列表時,當到達最后一項時,其“下一個”值將未初始化,並且可能會結束段錯誤,您必須將其初始化為null才能知道已達到目標值。列表的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM