강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của gungiup9608
gungiup9608

câu hỏi đã được viết

C ngôn ngữ cho những người học nghiêm túc về cấu trúc dữ liệu tuyến tính

Cải tiến và kiểm chứng danh sách dùng đầu giả

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

Đã giải quyết

Viết

·

56

0

안녕하십니까

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

 

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

 

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

 

image.png

 

 

c코딩-테스트알고리즘vc++

Câu trả lời 2

0

nullnull8537님의 프로필 이미지
nullnull8537
Người chia sẻ kiến thức

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

0

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

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

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

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

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

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

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

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

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

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

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

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

Hình ảnh hồ sơ của gungiup9608
gungiup9608

câu hỏi đã được viết

Đặt câu hỏi