내 문제가 어디인지는 알 수 없지만이 단독 연결 목록을 지울 수는 없습니다. 나는 내가 생각할 수있는 모든 것을 시도했다. 하나의 요소 (실제로는 연결된 목록의 해시 테이블)를 사용하여 목록을 테스트하지만 "삭제()"기능을 사용할 수 없습니다 (전체 목록을 지우고 각 노드를 삭제합니다). 당신이 이것을보고 올바른 방향으로 나를 가리킬 수 있다면.단일 연결 목록 지우기
노드 구조
struct Node
{
string m_str;
Node *m_pNext;
Node(void) {m_pNext = NULL;}
};
Node *m_pHead;
지우기 기능
Void LLString::erase (void){
if (!m_pHead)
{
return;
}
Node *temp = m_pHead;
while (temp)
{
temp = m_pHead; // The error allways shoes up around her
if (temp->m_pNext) // It has moved around a little as I have tried
{ // different things. It is an unhanded exception
m_pHead = temp->m_pNext;
}
temp->m_pNext = NULL;
delete temp;
}
}
내 추가 기능
void LLString::add (string str)
{
Node *nNode = new Node;
nNode -> m_str = str;
nNode ->m_pNext = m_pHead;
m_pHead = nNode;
}
그리고 현재 프로그램을 사용하고있는 유일한 기능은 전송이 기능입니다 모든 것을 파일로. (지우기 기능 바로 전에 사용됨)
void LLString::toFile (void)
{
ofstream fout;
fout.open ("stringData.txt",ios::app);
Node* temp = m_pHead;
while (temp)
{
fout << temp->m_str << endl;
temp = temp->m_pNext;
}
fout.close();
}
다시 삭제가 작동하지 않는 이유를 알고 계신다면 다시 알려주십시오.
감사
'if' 외부의 문장 대신에'else'가 있다는 것을 의미합니까? 그것이 의미하는대로'delete'를 호출하는 유일한 방법은'NULL'입니다. – Flexo
답변을 업데이트했습니다. – 2r2w