Node::Node(void* value, Node* next)
{
Value(value);
Next(next);
}
Node::~Node()
{
delete value;
delete next;
}
Stack::Stack()
{
top = 0;
}
Stack::~Stack()
{
while (!isEmpty()){
Node* node = top;
delete top;
top = node->Next();
}
}
Я уверен, что проблема связана с нажатием. Прямо сейчас, когда я запускаю его с помощью этого кода, он дает мне ошибку нарушения прав доступа.Я не могу понять, где я теряю память C++
void Stack::push(void* var)
{
Node* node = new Node(var, top);
top = node;
delete node;
}
const void* Stack::pop()
{
void* value = top->Value();
top = top->Next();
return value;
}
const void* Stack::peek() const
{
if (top != 0)
{
return top->Value();
}
else
return 0;
}
bool Stack::isEmpty() const
{
return (top == 0);
}
Я пытаюсь создать стек в коде, используя кучу для данных. Я не могу избавиться от утечки памяти. Когда я запускаю это и нажимаю два ints. Это говорит мне, что я просачиваю 16 бит данных.
вещи до сих пор учат недействительные указатели вместо базовых шаблонов? – chris
'top = node; delete node; '... whereupon' top' становится висящим указателем. –
'Узел * node = верх; delete top; top = node-> Next(); 'также не работает -' node' указывает на только что удаленный объект, поэтому вы не можете разыгрывать его для доступа к 'Next'. Возможно, 'while (! IsEmpty()) delete pop();'. Но - обратите внимание, что удаление 'void *' не будет вызывать дескриптор конкретного типа, поэтому небезопасно делать что-то вроде 'myStack.push ((void *) new std :: string (« hello! »)) ; '- деструктор' std :: string' не будет вызываться, когда стек будет уничтожен. –