Mam problem z wyciekiem pamięci w stosie i nie mam pojęcia co robię źle. Pewnie to coś banalnego ale nie potrafię tego znaleźć. Wykonanie programu tak jak poniżej skutkuje zajęciem 300MB pamięci. gcc version 4.6.1
# include <iostream>
using namespace std;
template<typename Typ>
class StackEl
{
public:
Typ val;
StackEl <Typ> *prev;
};
template<typename Typ>
class Tstack
{
public:
StackEl <Typ> *curr;
unsigned long int counter;
Tstack()
{
this->counter = 0;
}
~Tstack()
{
while(this->counter > 0)
{
this->pop();
}
}
void push(Typ val)
{
StackEl <Typ> *next; /// deklaracja nowego elementu stosu
next = new StackEl <Typ>; /// alokacja nowego elementu stosu
next->val = val; /// przypisanie wartości do nowego elementu
next->prev = curr; /// przypisanie do nowego elementu wskażnika na element bieżący
this->curr = next; /// ustawienie nowego elementu jeko element bieżący
this->counter++; /// zwiększenie licznika stosu
}
Typ top()
{
if(this->counter)
{
return this->curr->val;
}
else
{
throw "ERROR: Stack is empty !!!";
}
}
Typ pop()
{
if(this->counter)
{
StackEl <Typ> *to_del = curr; /// deklaracja zmiennej tymczasowej
Typ tmp = this->curr->val; /// kopiowanie wartości z góry stosu
curr = curr->prev; /// przenoszenie góry stosu o poziom niżej
delete to_del; /// usuwanie poprzedniej góry stosu
this->counter--; /// zmniejszanie licznika stosu o jeden
return tmp; /// zwracanie poprzedniej wartości góry stosu
}
else
{
throw "ERROR: Stack is empty !!!";
}
}
unsigned long int count()
{
return counter;
}
};
int main()
{
Tstack <int> a;
for(int i = 0; i < 40000000; i++) a.push(i);
for(int i = 0; i < 40000000; i++) a.pop();
cin.get();
}