У меня есть утечка памяти в одной функции, я не понимаю, почему это происходит, и не знаю, как это исправить. Назначение функции - перестроить связанный список в соответствии со значениями key1, он работает совершенно нормально, но по какой-то причине у него есть утечка памяти / я не освобождаю его должным образом
void ascending1 (Node * node, int A){
int i = 0;
double Temp_Key1[A];
int Temp_Val[A];
double Temp_Key2[A];
double temp2 = 0;
double temp3 = 0;
int temp1 = 0;
int amount = 0;
int x = 0;
for ( i = 0; i < A; i++ ){
Temp_Key1[i] = 0;
Temp_Key2[i] = 0;
Temp_Val[i] = 0;
}
Node *sort1_head;
sort1_head = NULL;
for (i = 0; i<A ; i++ ){
Temp_Key1[i] = node->key1;
Temp_Key2[i] = node->key2;
Temp_Val[i] = node->value;
node = node->next;
}
amount = A-1;
while (x<=amount){
for (i = 0; i<A ; i++ ){
if (Temp_Key1[i] < Temp_Key1[i+1]){
temp2 = Temp_Key1[i];
Temp_Key1[i] = Temp_Key1[i+1];
Temp_Key1[i+1] = temp2;
temp3 = Temp_Key2[i];
Temp_Key2[i] = Temp_Key2[i+1];
Temp_Key2[i+1] = temp3;
temp1 = Temp_Val[i];
Temp_Val[i] = Temp_Val[i+1];
Temp_Val[i+1] = temp1;
}
}
x++;
}
for ( i = A ; i >= 0 ; i--){
node = malloc(sizeof(Node));
node->value = Temp_Val[i];
node->key1 = Temp_Key1[i];
node->key2 = Temp_Key2[i];
node->sort1 = sort1_head;
sort1_head = node;
}
printf("\n");
printf("Following the sort1 links:\n");
print_list1(node);
sort1_head = NULL;
free_list(node);
}
Функция, которая освобождает его
void free_list(Node * head){
Node * new_head = head;
Node * old_node = NULL;
while (new_head != NULL){
old_node = new_head;
new_head = new_head->next;
free(old_node);
}
}
Valgrind дает мне следующую ошибку:
==20167== Conditional jump or move depends on uninitialised value(s)
==20167== at 0x10928C: free_list (FuncDef.c:19)
==20167== by 0x109B24: ascending1 (FuncDef.c:199)
==20167== by 0x10922D: main (main.c:26)
==20167== Uninitialised value was created by a heap allocation
==20167== at 0x483577F: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==20167== by 0x109A75: ascending1 (FuncDef.c:181)
==20167== by 0x10922D: main (main.c:26)
==20167==
==20167==
==20167== HEAP SUMMARY:
==20167== in use at exit: 48 bytes in 1 blocks
==20167== total heap usage: 6 allocs, 5 frees, 2,240 bytes allocated