양방향 연결리스트에서 실행도중 죽는 이유좀 찾아주세요.
이름없음
질문 제목 :
이중연결리스트 만들어서 사용하려고 하는데요....검색이후에 죽어버리는데 디버그 후에 정확히 죽는 시점이 free(temp)인것 같은데어디서 말썽인지 이유좀 알고 싶어요..
질문 내용 : #include stdio.h
#include stdlib.htypedef struct node {
int data;
struct node *prev;
struct node *next;
} node;typedef struct list {
node * head;
node * tail;
node * cur;
int count;
} list;list * initlist();
node * addnode(list * list, int data);
void deletenode(list * list, int word);
node * searchnode(list * list, int word);list * initlist() {
list *newlist = null; newlist = (list *)malloc(sizeof(list)); if(newlist == 0) {
printf(fail newlist malloc!!\n);
return null;
} newlist-head = null;
newlist-tail = null;
newlist-cur = null;
newlist-count = 0; return newlist;
}node * addnode(list * list, int data) {
node * newnode = null; newnode = (node *)malloc(sizeof(node)); if(newnode == 0) {
printf(fail newnode malloc!!\n);
return null;
} newnode-data = data;
if(list-head == null) {
list-head = newnode;
list-tail = newnode;
list-cur = newnode;
}
else {
list-cur-next = newnode;
newnode-prev = list-cur;
list-cur = newnode;
} list-tail = newnode;
list-count++; return newnode;
}
void deletenode(list * list, int word) {
node *temp = null; list-cur = list-head; while(list-head != null) {
if(list-cur-data == word) {
temp = list-cur;
list-cur-prev-next = list-cur-next;
free(temp);
}
list-cur = list-cur-next;
}
list-count--; return;
}
node * searchnode(list * list, int word) {
list-cur = list-head; while(list-head != null) {
if(list-cur-data == word) {
return list-cur;
}
list-cur = list-cur-next;
} return null;
}int main(void) {
list *newlist = null;
node *searchtemp = null;
int num[5] = {1, 2, 3, 4, 5};
int i = 0; newlist = initlist();
for(i=0; i5; i++) {
addnode(newlist, num[i]);
} searchtemp = searchnode(newlist, 2);
printf(검색노드 : %d \n, searchtemp-data); deletenode(newlist, 2); printf(삭제후 리스트\n);
newlist-cur = newlist-head;
for(i=0; i4; i++) {
printf(%d , newlist-cur-data);
newlist-cur = newlist-cur-next;
} return 0;
}
-
봄시내
1, 2, 3번을 해결하니 가운데 값들은 이제 해결이 되었는데요...(head와 tail은 제가 따로 조건문을 넣어주면 될것 같아요)
4번이 조금 이해가 안가는데,,,While(list-cur != NULL)로 했을때 list-cur에 next나 prev가
없는 경우를 말씀하신건가요? -
흰추위
몇가지의 문제가 있습니다.
1. DeleteNode 에서 list-cur-prev-next 는 있으나
list-cur-next-prev 의 연결이 없습니다.
2. cur 가 삭제되는데 삭제되는 구문 내부에 list-cur 의 변경이 없습니다. if 구문을 빠져나온 후
list-cur = list-cur-next; 했을경우 어떤값이 대입될 것인지 고심해볼 필요가 있습니다.
3. while 루프를 빠져나가는 구문의 조건이 잘못되었습니다.
4. w