모든 malloc에 대해 우리는 종료 전에 해제해야합니다. valgrind 보고서를 기반으로, 나는 누출이 없습니다. 즉, valgrind는이 코드에 오류가 있다고보고합니다. Address 0x402613c is 4 bytes inside a block of size 8 free'd
Valgrind 오류가 있지만 누출이 없음
간략히하기 위해 아래는 노드 유형 및 노드를 malloc하거나 해제하는 코드 섹션을 보여주는 링크 된 목록 코드의 일부분입니다.
typedef struct node
{
int n;
struct node* next;
}
node;
// global variable for the head of the list
node* head = NULL;
int main(void)
{
// user menu
while (true)
{
printf("Please choose an option (0, 1, 2): ");
int option = GetInt();
switch (option)
{
// quit
case 0:
free_nodes(head);
printf("Goodbye!\n");
return 0;
// snipped: code that calls insert and print functions
bool insert_node(int value)
{
// create new node
node* new_node = malloc(sizeof(node));
if (new_node == NULL)
{
return false;
}
// snipped: some code that adds nodes to linked list
}
/**
* Frees all of the nodes in a list upon exiting the program.
*/
void free_nodes(node* list)
{
// initialize pointer
node* curr_node = head;
// initialize variable for end of list
bool is_end = false;
// free nodes
while (!is_end)
{
// if an empty list, free node and exit
if (curr_node->next == NULL)
{
free(curr_node);
is_end = true;
}
// else free node list until end of list if found
else
{
free(curr_node);
curr_node = curr_node->next;
}
}
}
'무료 (curr_node); curr_node = curr_node-> next;': 이미 릴리스 된 포인터는 사용하지 마십시오. – BLUEPIXY