2017-04-04 2 views
0

2d 연결된 목록에서 작업 중이며 연결된 목록 각각이 오른쪽과 아래를 가리키면 내 프로그램에서 그 때마다 예외가 발생하여 읽기 액세스 위반이 발생합니다. 은 0xCDCDCDCD였습니다. 4 행에서 b = a-> next 예외가 발생했습니다.2d 연결된 목록 소멸자

LinkedList::~LinkedList() 
{ 
nodePtr a = head; 
nodePtr b = a->next; 
nodePtr c = down; 
nodePtr d = c->bottom; 

while (a != NULL) 
{ 
    nodePtr temp = a->next; 
    nodePtr temp1 = c->bottom; 
    delete a; 
    delete c; 
    a = temp; 
    c = temp; 
} 

}에도이 코드가 제대로 작동하는지 랬

+0

'a'가 null이 아닌지 확인하고 있습니다. 'c'는 어떨까요? 또한 어떤 라인에서 예외가 발생합니까? – AlexG

+0

더 일찍 초기화하는 것을 잊었습니다. – molbdnilo

+0

값 '0xcdcdcdcd'는 Visual Studio와 디버거에서 일반적으로 초기화되지 않은 전역 메모리를 표시하는 데 사용됩니다 (예 : [이 MSDN 참조] (https://msdn.microsoft.com/en-us/library/aa260966(v=vs) .60) .aspx)). 즉, 해당 값을 가진 변수가 있으면이를 제대로 초기화하지 않은 것입니다. 생성자에서'nullptr'에 대한 포인터를 놓치고 있습니까? –

답변

0

(즉, 심지어 항목의 수를 의미) : ac 포인터가 당신을 만난 때

while (a != NULL) 
{ 
    nodePtr temp = a->next; 
    nodePtr temp1 = c->bottom; 
    delete a; 
    delete c; 
    a = temp; 
    c = temp1; // fixed definitely incorrect assignment 
} 

당신은 정의되지 않은 동작을 이미 삭제 된 노드를 삭제하십시오.

따라서 올바른 방법은 한 방향으로 만 노드를 삭제하는 것입니다 (나는 앞으로 방향을 선택합니다).