강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

giup gun님의 프로필 이미지
giup gun

작성한 질문수

독하게 C를 배운 사람을 위한 선형 자료구조

더미 헤드를 갖는 리스트로 개선 및 검증

마지막 열의 노드를 삭제하였을때 읽기 엑세스 위반 발생 건

해결된 질문

작성

·

11

0

안녕하십니까

'더미 헤드를 갖는 리스트로 개선 및 검증' 학습하던 도중에, 마지막 노드인 'jang'을 삭제할 시에 읽기 엑세스 위반 오류가 뜨면서 정상적인 종료가 되지 않았습니다.

 

디버깅으로 살펴보니 pPrev->pNext도 마지막 노드이다 보니 NULL인 상태에서 pPrev->pNext 도 동일하게 NULL 인상태에서 발생한 문제인듯 합니다.

 

제생각에는 마지막 노드를 삭제할때는 pPrev->pNext NULL 경우에 대한 IF 절을 넣는게 맞아보이는데 맞는 조치일까요?

 

image.png

 

 

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

if문으로 NULL인지 체크하면 비정상 종료는 막을 수 있겠으나 더미 헤드와 테일 노드가 모두 운영되는 상황이라면 그런 체크 없이 잘 작동하는 것이 맞겠습니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다.

giup gun님, 마지막 노드를 삭제할 때 발생하는 읽기 엑세스 위반 오류에 대해 설명드리겠습니다.

말씀하신 대로, 마지막 노드를 삭제할 때 pPrev->pNextNULL인 경우가 발생할 수 있습니다. 이는 노드를 제거한 후 리스트의 끝 부분을 올바르게 처리하지 않은 경우 생기는 문제입니다.

이런 문제를 해결하려면 삭제하려는 노드가 마지막 노드인지 확인하고, 그에 맞게 처리해 주는 것이 필요합니다. 일반적으로는 다음과 같은 방법을 사용하여 이 문제를 해결할 수 있습니다:

  1. 이전 노드를 확인: 삭제할 노드의 이전 노드 (pPrev)가 있는지 먼저 확인합니다.

  2. 이전 노드의 연결 해제: pPrev->pNextNULL로 설정하여 마지막 노드를 삭제한 후의 연결 상태를 올바르게 만듭니다.

코드로 표현하면 다음과 같은 방식이 될 수 있습니다:

if (pPrev != NULL) {
    pPrev->pNext = NULL;
}

이렇게 수정하면, 마지막 노드를 삭제한 후에도 리스트의 구조가 깨지지 않고 정상적으로 유지됩니다.

이미지에서 보여주신 링크드 리스트 관리 코드는 일반적인 C 언어 스타일의 코드로 보이며, 이런 에러를 방지하기 위한 체계적인 접근을 통해 해결할 수 있을 것입니다.

참고할 만한 유사한 질문 링크도 제공해드리니, 큰 그림을 그리실 때 도움이 되셨으면 합니다:
- 메모리 관리를 위한 더미 노드 사용하기

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

giup gun님의 프로필 이미지
giup gun

작성한 질문수

질문하기