![](/img/trans.png)
[英]Valgrind Errors - Conditional Jump or move depends on uninitialised values
[英]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.