연결리스트에서 제거
새꽃
void insert(int a)// 받는함수
{
Node *add = (Node*)malloc(sizeof(Node));
add-a = a;
add-next = head-next;
head-next = add;
}
void del(int a)// 제거함수
{
Node *temp=head;
Node *d;
while(temp-next != NULL)
{
if(temp-next-a == a)//지울 값을 찾으면
{
d=temp-next;
temp-next=temp-next-next;
free(d)
}
temp=temp-next;
}
}
값이 15 20 23 이 저장되있는데 값 20을 지우려고하면 응용프로그램 오류가 나는데요
컴파일에서는 전혀문제 없는데 어디가 이상이 있나요?
-
꽃겨울
아 그렇군요 head부분이 잘못됬군요 답변해주신 3분 감사합니다
-
콩알녀
하여튼 head에 무엇이 들어있는지는 모르지만 head,23, 20,15 저장 됩니다 고치시는 것이 좋으실듯
-
여우비
참 head를 포인터로 잡았을때 head는 구조체 일것이고 메모리가 없어도 head-하여도 컴파일러는 에러메시지를 내지 않습니다 경고 나올려나??
-
비치
insert 함수에서 문제가 있습니다 수다님 말과 마음도둑님 말이 다 맞는 듯합니다
head가 메모리가 할당 된 곳이 없는 듯합니다.. 아닐수도 있지만.. head가 메모리가 있고, head-next에는 null 되어 있다는 가정하에 하겠습니다 최조 15를 입력하면 그 값은 head 다음에 연결리스트로 저장이 됩니다 다음20을 대입하면 그 값은 head의 next즉 15가 저장된 주소를 20이 저장된 주소의 next에 주소를 넣고 20이 저장된 -
세련
마음도둑님 말씀대로라면 지금 제가 지정한 삭제함수는 잘못 작성한 것이라는건가요?
음..그밖에 insert 함수에서의 지정은 틀리지 않았는지요? -
권뉴
삭제 문제가 아니라 head 문제 인듯 합니다. 15라는 최초의 노드는 head-next 라는 곳에 기억되어 있습니다. 그런데 순환은 head 부터 합니다. 즉, 알 수 없는 곳에 접근하여 문제가 발생하는 듯 합니다. 물론 15-20-30이 들어 있고 20을 삭제한다는 경우에 한합니다. 다른 수를 삭제한다면 삭제 함수에 확실히 문제가 있는 링크드 리스트 입니다.
-
YourWay
동적할당한 메모리를 사용하다가 영역외의 곳을 침범할 경우 free할때 오류가 일어나곤 합니다.