[C언어] 단순연결리스트 메모리 해제
조회수 3530회
#include<stdio.h>
#include<stdlib.h>
typedef struct ListNode {
int data;
struct ListNode* link;
}list;
typedef struct {
list* head;
}list_h;
list_h* create() {
list_h* L;
L = (list_h*)malloc(sizeof(list_h*));
L->head = NULL;
return L;
}
void addLastNode(list_h* L, int x) {
list* newNode = (list*)malloc(sizeof(list*));
list* p;
newNode->data = x;
newNode->link = NULL;
if (L->head == NULL) {
L->head = newNode;
return;
}
else {
p = L->head;
while (p->link != NULL) {
p = p->link;
}
p->link = newNode;
}
}
void freeList(list_h* L) {
list* c;
while (L->head != NULL) {
c = L->head;
L->head = L->head->link;
free(c);
c = NULL;
}
}
void reverse(list_h* L) { //L->r->q->p
list* p = L->head;
list* q = NULL;
list* r = NULL;
while (p != NULL) {
r = q;
q = p;
p = p->link;
q->link = r;
}
L->head = q;
}
void delLastNode(list_h* L) {
list* a = L->head->link;
list* b = L->head;
if (L->head == NULL) return;
if (L->head->link == NULL) {
free(L->head);
L->head = NULL;
return;
}
else {
while (a->link != NULL) {
b = a;
a = a->link;
}
free(a);
b->link = NULL;
}
}
void printList(list_h* L) {
list* p = L->head;
printf("L -> ");
while (p != NULL) {
printf("%d ", p->data);
p = p->link;
if (p != NULL) printf("-> ");
}
}
int main() {
list_h* L;
L = create();
printf("1. 공백리스트 생성\n");
printList(L);
printf("2. 리스트에 노드 추가하기\n");
addLastNode(L, 1);
addLastNode(L, 2);
addLastNode(L, 3);
printList(L);
printf("3. 마지막 노드 삭제하기\n");
delLastNode(L);
printList(L);
printf("4. 리스트 원소를 역순으로 변경하기\n");
reverse(L);
printList(L);
printf("5. 리스트 공간 해제, 공백리스트로 만들기\n");
freeList(L);
printList(L);
return 0;
}
delLastNode함수와 freeList함수에서 free(L);가 예외발생하네요,,ㅠ 뭐가 잘못되었나요,,,
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
void addLastNode(list_h* L, int x) { list* newNode = (list*)malloc(sizeof(list*)); ........ }
문제의 근원은 여기같네요.
list* newNode = (list*)malloc(sizeof(list));
로 수정하니 작성하신 메인함수는 잘 돌아가네요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력