一個要引起注意的delete動作
我在雙向鏈表類中定義的clear()函數如下:
void clear()
{
if( !isEmpty() )
{
list_item< type >* temp = list_head;
list_item< type >* delTemp;
while( temp != list_tail )
{
delTemp = temp;
temp = temp->back;
delete delTemp;//釋放空間
}
原來這里的語句是temp != list_tail->back 但是一旦 temp 被賦值為 list_tail->back 那//么它本身就是 delTemp 即將被刪除的空間的一部分 再對一個已經不存在的指針進行操作當然就會崩潰 這樣就導致在對temp的引用是不存在的 所以出錯
delete list_tail;
list_head = NULL;
size = 0;
}
else
{
return;
}
}
我還是很快發現了 但是很有覺得價值 所以寫下提醒自己