1
#include <stdio.h>
#include <stdlib.h>
typedef struct data {
int a, b;
} Data ;
struct node {
Data info;
int priority;
struct node *link;
};
typedef struct node* Node;
void insert(Node header, int pr, Data el) {
Node cur = header;
Node tmp = malloc(sizeof(struct node));
tmp->info = el;
tmp->priority = pr;
//descending <=
while (cur->link != NULL && pr >= cur->link->priority)
cur = cur->link;
tmp->link = cur->link;
cur->link = tmp;
}
Node delete(Node header) {
Node tmp;
if (header->link == NULL)
printf("Empty priority queue");
else {
tmp = header->link;
header->link = tmp->link;
free(tmp);
return tmp;
}
}
void display(Node head) {
Node cur = head->link;
while (cur != NULL) {
printf("%d ", cur->priority);
cur = cur->link;
}
}
int main(int argc, const char *argv[])
{
Data d;
Node tmp;
Node head = malloc(sizeof(struct node));
head->link = NULL;
insert(head, 3, d);
insert(head, 2, d);
insert(head, 1, d);
while (head->link != NULL) {
tmp = delete(head);
printf("%d ", tmp->priority);
}
return 0;
}
출력은 1 2 3입니다. 그러나 삭제시 메모리 (free (tmp))를 할당 해제 한 다음 tmp를 반환했습니다. 왜 tmp는 여전히 주요 기능에서 인쇄하고 있습니까? gcc 컴파일러 사용은 메모리 위치를 삭제할 수 없습니다.
왜 코드는 이미'free()'된 메모리에 접근하고 있습니까? 'delete()'함수가 왜 처음부터'free()'메모리에 대한 포인터를 리턴합니까? –
부수적으로, 특히 Node typedef가 마음에 들지는 않습니다. 누군가가 당신의 함수 정의만을 살펴 본다면, 당신이 참조가 아닌 값을 전달하는 것처럼 보입니다. 여기서 typedef를 사용하면 가독성이 떨어집니다. 그냥 내 생각을 비록 :) –
@ Demian : 나는 동의하지만 대학에서 내 교수는 똑같은 일을하는 데 사용됩니다. 나는 그것을 싫어하지만 일부 사람들은 typedef에서 포인터를 숨기고 싶어한다. – Lucas