이중연결리스트 중 에러와 워닝이 없는데 안돌아가요ㅜㅜ
창의적
질문 제목 : 이중연결리스트 프로그램 이중연결리스트 중 에러와 워닝이 없는데 실행이 안되요ㅜㅜ미숙한 제가 볼때는 문제가 없어보여서요ㅜㅜ
한번 훑어봐 주세요 ㅜㅜ
맨 아래가 출력결과 입니다.
질문 내용
#includestdio.h
#includestdlib.h
typedef struct node {
int data;
struct node *next;
struct node *prev;
} node;
typedef struct list {
node *head;
node *current;
} list;
void initializelist(list *l)
{
l-head = null;
l-current = null;
}
node *getnode(int data)
{
node *temp;
temp = (node *)malloc(sizeof(node));
temp-data = data;
temp-prev = null;
temp-next = null;
return temp;
}
void printbackward(list l)
{
node *p;
int i;
if (l.head == null)
printf(list is empty!\n);
else {
p = l.head;
while (p-next != null)
p = p-next;
printf(--- backward listing ---\n);
for (i = 1; p != null; i++) {
if (p == l.current)
printf(%5d * %d\n, i, p-data);
else
printf(%5d : %d\n, i, p-data);
p = p-prev;
}
}
}
void insertafter(list *l, int data)
{
node *temp = getnode(data);
if (l-head == 0)
l-head = temp;
else if (l-current-next != 0) {
temp-prev = l-current;
temp-next = l-current-next;
l-current-next-prev = temp;
l-current-next = temp;
}
else {
l-current-next = temp;
temp-prev = l-current;
}
l-current = temp;
}
void deletecurrent(list *l)
{
node *p;
if (l-head == null)
printf(list is empty!\n);
else {
p = l-current;
if (l-head == l-current) {
l-head = l-head-next;
l-current = l-current-next;
l-current-prev = 0;
}
else if (l-current-next == 0) {
l-current-prev-next = 0;
l-current = l-head;
}
else {
l-current-next-prev = l-current-prev;
l-current-prev-next = l-current-next;
l-current = l-current-next;
}
free(p);
}
}
int main()
{
list l;
initializelist(&l);
insertafter(&l, 30);
deletecurrent(&l);
printbackward(l);
insertafter(&l, 50);
insertafter(&l, 70);
insertafter(&l, 90);
printbackward(l);
return 0;
}
/*
--- list is empty!
--- backward listing ---
90 70 50
press any key to continue
*/
-
알버트
포인터는 우연찮게 메모리 확보가 되어도 동작을 합니다.
이러면 동작을 할때도 있고 안할때도 있고 그런 프로그램이 되어버립니다.
자신이 원하는 주소 값이 들어있는지 확인해 볼 필요가 있습니다.