양방향 연결리스트에서 실행도중 죽는 이유좀 찾아주세요.
예다움
질문 제목 :
이중연결리스트 만들어서 사용하려고 하는데요....검색이후에 죽어버리는데 디버그 후에 정확히 죽는 시점이 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;
}
-
도래솔 2025-02-13
1, 2, 3번을 해결하니 가운데 값들은 이제 해결이 되었는데요...(head와 tail은 제가 따로 조건문을 넣어주면 될것 같아요)
4번이 조금 이해가 안가는데,,,While(list-cur != NULL)로 했을때 list-cur에 next나 prev가
없는 경우를 말씀하신건가요? -
텐시 2025-02-13
몇가지의 문제가 있습니다.
1. DeleteNode 에서 list-cur-prev-next 는 있으나
list-cur-next-prev 의 연결이 없습니다.
2. cur 가 삭제되는데 삭제되는 구문 내부에 list-cur 의 변경이 없습니다. if 구문을 빠져나온 후
list-cur = list-cur-next; 했을경우 어떤값이 대입될 것인지 고심해볼 필요가 있습니다.
3. while 루프를 빠져나가는 구문의 조건이 잘못되었습니다.
4. w
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |
2693299 | 파일입출력 바이너리파일 | 독특한 | 2025-04-30 |
2693273 | 오류 (1) | 귀1여운렩 | 2025-04-30 |
2693080 | visual studio 2008 express edition 등록키 말인데요 | 얀별 | 2025-04-28 |
2693053 | 배열, 구조체 관련 프로그래밍 질문드립니다. | 싸리 | 2025-04-28 |
2693025 | 프로그램을 짜봤는데요 ㅠㅠ | 상처입은마음 | 2025-04-28 |
2693001 | 워닝문제, 세그멘트결함문제 (1) | 월식 | 2025-04-28 |
2692979 | 라인한줄 이랑.. 소스 설명좀 부탁드려요.. | 이루리 | 2025-04-27 |
2692947 | 이 문제좀 풀어 주세요..ㅜㅜ (1) | 소리 | 2025-04-27 |
2692889 | 함수의 구조체 인자로 받아서 그 인자로 데이터 넣기... | 한뎃집 | 2025-04-27 |
2692862 | 성적 출력 하는 프로그램인데요~!!!도움좀 주세욤.ㅠ | 두빛나래 | 2025-04-26 |
2692831 | if 문 간단해요 빨리좀 ㅠㅠ | 이플 | 2025-04-26 |
2692805 | 실행파일이 이상해요 | 푸헷 | 2025-04-26 |
2692750 | 퀵정렬 질문이요 . | 동생몬 | 2025-04-25 |