Witam.
Mam takowy problem, próbuję przechowywać obiekty pewnej klasy w liście dwukierunkowej. niestety Elementem mojej klasy jest dynamiczna tabela, której przydzielam pamięć w konstruktorze, a zwalniam w destruktorze.
Destruktor zgodnie z oczekiwaniem wywołuje się przy instrukcji .pop_front(); Problem w tym, że wywołuje się on także przy zamykaniu programu (nawet jeśli lista jest pusta) i próbuje zwalniać już raz zwolnioną pamięć (albo zwalniać pamięć pod losowym adresem - nie jestem pewien), co powoduje błąd programu.
Fragment kodu, w którym to się dzieje:
#include "stdafx.h"
#include <iostream>
#include <list>
using namespace std;
int m;
class pakiet
{
public:
char *d;
pakiet(void){
d=new char[m];
}
~pakiet(void){
delete[] d;
}
};
int main(int argc, char* argv[]){
m=atoi(argv[2]);
list<pakiet> lista;
class pakiet p;
lista.push_front(p);
lista.pop_front();
system("pause");
return 0;
}
czy jest jakiś sposób na zabezpieczenie się przed ponownym wywołanie destruktora?