PDA

Просмотр полной версии : Проблема с овобождением памяти в C++?


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




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