I'm trying to free up memory whenever possible, but I keep triggering breakpoints when calling delete. It's been awhile since I've done c++ so I don't remember the exact way to do this.
main.cpp
int _tmain(int argc, _TCHAR* argv[])
{
LIFO lifo = *new LIFO();
LIFO::Element element1 = *new LIFO::Element(1);
LIFO::Element element2 = *new LIFO::Element(2);
LIFO::Element element3 = *new LIFO::Element(3);
LIFO::Element element4 = *new LIFO::Element(4);
LIFO::Element element5 = *new LIFO::Element(5);
LIFO::Element element6 = *new LIFO::Element(6);
lifo.Push(element1);
lifo.Push(element2);
lifo.Push(element3);
lifo.Push(element4);
lifo.Push(element5);
lifo.Push(element6);
lifo.Peek(lifo.mSize);
lifo.Pop();
lifo.Pop();
lifo.Pop();
lifo.Peek(lifo.mSize);
lifo.Push(element1);
lifo.Push(element2);
lifo.Push(element3);
lifo.Push(element4);
lifo.Push(element5);
lifo.Push(element6);
lifo.Peek(lifo.mSize);
lifo.Empty();
lifo.Peek(lifo.mSize);
return 0;
}
LIFO.h
class LIFO
{
public:
unsigned int mSize;
LIFO(void)
:mSize(0)
{
mTop = nullptr;
}
~LIFO(void)
{
}
class Element
{
public:
Element* mNextElement;
int mData;
Element()
:mData(0)
,mNextElement(nullptr)
{
}
Element(int data)
:mData(data)
,mNextElement(nullptr)
{
}
~Element()
{
}
};
Element* mTop;
void Push(Element& element)
{
if(mTop != nullptr)
{
Element* newElement = &element;
newElement->mNextElement = mTop;
mTop = newElement;
delete newElement;
newElement = nullptr;
}
else
{
mTop = &element;
}
++mSize;
}
void Pop()
{
if(mTop != nullptr)
{
Element* oldElement = mTop;
mTop = mTop->mNextElement;
--mSize;
delete oldElement;
oldElement = nullptr;
}
}
void Empty()
{
while(mTop != nullptr)
{
Pop();
}
}
void Peek(unsigned int depth)
{
Element* current = mTop;
for(unsigned int i = 0; i < depth; ++i)
{
if(current != nullptr)
{
std::cout << current->mData << '\n';
if(current->mNextElement != nullptr)
{
current = current->mNextElement;
}
else
{
break;
}
}
else
{
break;
}
}
delete current;
current = nullptr;
}
};
I also tried these in the destructors at one point and they didn't work right either
~LIFO(void)
{
Element* current = mTop;
while(current != nullptr)
{
Element* next = current->mNextElement;
delete current;
current = next;
}
current = nullptr;
}
How do I safely free up memory in this stack?