[英]C++ Stack Template SIGTRAP Error
剛開始學習堆棧模板時,每當我嘗試釋放內存以調整大小時,在使用推功能時就會遇到問題。 該功能一直很好,直到達到最大容量為止,然后立即進入一系列錯誤消息,這些消息不是我的調試器真正接收到的。 這是帶有導致錯誤的函數的頭文件,以及它所調用的函數。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template <class T>
class MyStack
{
private:
T* data;
int topVal;
int capacity;
public:
MyStack()
{
capacity = 10;
topVal = 0;
data = new T[capacity];
}
~MyStack()
{
delete [] data;
data = 0;
}
void push(T);
T pop();
T top();
bool isFull();
bool isEmpty();
string toString();
};
template <class T>
void MyStack<T>::push(T value)
{
if(!isFull())
{
data[++topVal] = value;
}
else
{
capacity *= 2;
T* holdPtr = new T[capacity];
for(int i = 0; i <= topVal; ++i)
holdPtr[i] = data[i];
delete [] data; //This is where the error is occurring
data = holdPtr;
data[++topVal] = value;
}
}
template <class T>
bool MyStack<T>::isFull()
{
if(topVal < capacity)
return false;
else
return true;
}
任何幫助將不勝感激。
編輯:問題解決了! 感謝您的所有幫助!
兩個(相關)問題:
1)對於空堆棧, topval == 0
。 但是您的push
將元素放入data[++topVal]
-即data[1]
。 永遠不會使用data[0]
。
2)當topval == 9
並且capacity == 10
, topval == 9
isFull()
返回false
並且您的push
嘗試將值存儲在data[10]
,該值越界並損壞內存。
另外,您的push
應該通過const
引用獲取value
,或者(如果使用的是C ++ 11)請使用std::move
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.