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);
}
我想在代碼中使用堆的數據創建堆棧。我不能擺脫內存泄漏。當我運行這個並推入兩個整數。它告訴我,我正在泄漏16位數據。
事情還教空指針,而不是基本的模板? – chris
'top = node;刪除節點;'...因此'頂部'成爲一個懸掛指針。 –
'Node * node = top;刪除頂部; top = node-> Next();'也被打破了--'節點'指向剛剛被刪除的對象,所以你不能取消引用它來訪問'Next'。也許'while(!isEmpty())delete pop();'。但是 - 請注意,刪除一個'void *'不會調用任何特定於類型的析構函數,所以執行'myStack.push((void *)new std :: string(「hello!」))是不安全的。 ;' - std :: string'析構函數在堆棧被銷燬時不會被調用。 –