john0902   3년 전

c로 링크드 리스트 구현했는데 모든 경우의 수에 대해서 다 처리를 한 것 같은데 계속 런타임 에러가 뜹니다..

혹시 메모리 양을 초과해서 그런 것인가요?

dldyddlwl   3년 전

입력]

aaa

3

L

B

B  

=> 액세스 위반 

[이유]

void rmv() 에서 볼 수 있듯이, cursor(temp)의 경우 if(cursor->right)를 거친 경우, 별다른 과정없이 free(temp)를 거치게 됩니다.

그런데, 문제는 free가 메모리를 반환하지만, 그 포인터를 초기화 해주지는 않습니다. 

ex) free(temp);   printf("%d",temp);   

출력 : 15880184

따라서, 메모리를 반환하는 free를 호출하더라도, 그 포인터를 NULL로 초기화해주는 것이 안전합니다. 만약, 재사용되지 않는 포인터라면 안전하지만,

위와 같이 cursor의 경우는 계속 사용되므로, 이와 같은 경우가 발생하게 됩니다.

cursor 값이 쓰레기값을 가져 if(cursor) 문을 통과해, 다시 rmv()를 호출하여, 액세스 위반이 일어나게 된 겁니다.

john0902   3년 전

감사합니다!!! 명확한 해결책이었습니다

댓글을 작성하려면 로그인해야 합니다.