一个要引起注意的delete动作

一个要引起注意的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;

              }

       }

我还是很快发现了 但是很有觉得价值 所以写下提醒自己

你可能感兴趣的:(一个要引起注意的delete动作)