Вообще не могу понять в чем проблема. Удаляет столько же элементов сколько и выделялось по тем же адресам. При небольшом числе элементов всё ок а когда много, то ошибка. Плизз хелп Code: struct my_list{ int o; my_list *prev; my_list *next; }; int _tmain(int argc, _TCHAR* argv[]) { vector<my_list*> test; //для дебага my_list first; first.prev=NULL; first.next=NULL; my_list *curr; curr=&first; ///////////////////////////////// //вставляет элементы в конец списка for (int i=0;i<100000;i++){ my_list *temp; temp=new my_list; //temp->prev=NULL; temp->next=NULL; //cout<<temp<<endl; test.push_back(temp); //для дебага curr->next=temp; temp->prev=curr; curr=temp; } /////////////////////////// ///////////////////////// //освобождает список //можно было освобождать с хвоста списка но мне нужно так. int ii=0; //для дебага my_list *temp,*a; a=&first; while(a->next){ a=a->next; temp=a->prev; temp->next=a->next; //cout<<a<<endl; if(a!=test[ii])cout<<"error"; //для дебага ii++; //для дебага delete a; a=temp; } ///////////////////////////////////////////////// return 0; }
Нашел ошибку, при удалении забыл список назат связать. while(a->next){ temp=a; a=a->next; if(a->next){ temp->next=a->next; a->next->prev=temp; }else{ temp->next=0; } delete a; a=temp; }