2014-10-09 1 views
1

Visual Studio의 C++에서 단일 링크 된 목록을 만들려고 노력했지만이 이상한 버그가 계속 발생했습니다. 목록을 테스트 할 때 목록을 삭제할 때를 제외하고는 테스트에서 모든 것이 완벽하게 작동합니다. 어떤 이유로 든 삭제를 호출 할 때마다 다음 순서로 다음 메시지가있는 Visual Studio 팝업이 나타납니다.링크 된 목록 소멸자 (C++ Visual Studio)에서 디버그 어설 션 오류가 발생했습니다. (Visual Studio)

디버그 어설 션이 실패했습니다! 표현식 : _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)

디버그 어설 션 오류! 식 : _CtrilsValidHeapPointer (pUserData)

디버그 어설 션이 실패했습니다! 식 : _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)

머리글을 디자인 한 방식대로 헤드는 데이터 멤버를 보유하지 않는 더미 노드에 대한 포인터입니다. 이 문제입니다

int main() { 
SSLL<char> list; 
list.push_back('A'); 
delete &list; 
} 
+0

노드를 추가하는 방법 표시 –

+0

방금 ​​추가했습니다. 그것을 살펴 주셔서 고마워요! – Code

+0

댓글이 잘 보입니다. 목록의 작성 및 삭제를 추가 할 수 있습니까? –

답변

1

: 여기에 문제를 일으키는 것으로 밝혀졌다 wwhich 코드입니다

int main() { 
    SSLL<char> list; 
    list.push_back('A'); 
    delete &list; // WRONG! 
} 

클래스가 스택 로컬 오브젝트입니다, 당신은에 delete를 호출 할 필요는 없다 그 주소 : 범위를 벗어나면 자동으로 파괴됩니다.

0

variable allocated on stack을 삭제하려는 경우 new에 의해 할당 된 메모리에만 delete을 호출해야하는데 이는 this answer에 이미 적용되었습니다.

아마 목록을 지우는 데 단지 std::vector::clear()을 사용하고 싶을 것입니다. (필요하지는 않지만 벡터 소멸자가 메모리를 확보합니다).

관련 문제