Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Проблема с овобождением памяти в C++? (https://forum.antichat.xyz/showthread.php?t=111742)

ZipaCna 18.03.2009 13:05

Проблема с овобождением памяти в C++?
 
Вообще не могу понять в чем проблема. Удаляет столько же элементов сколько и выделялось по тем же адресам. При небольшом числе элементов всё ок а когда много, то ошибка.
Плизз хелп



Код:

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;
}


_nic 18.03.2009 14:55

Какая ошибка?

awdrg 18.03.2009 21:33

если мне не изменяет память, то по нормам синтакиса нужно писать
Код:

delete [ ] a;

ZipaCna 18.03.2009 23:07

Нашел ошибку, при удалении забыл список назат связать.
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;
}


Время: 17:16