【发布时间】:2013-04-30 21:20:41
【问题描述】:
我知道有很多类似的问题,但我还没有找到任何有用的东西。我已经在这里待了几个小时了,这让我发疯了。当为复制构造函数创建的变量调用析构函数时,出现分段错误。
//Copy Constructor
Stack::Stack(const Stack &aStack)
{
size = 0; //this is incremented as new items are pushed onto the stack.
cap= aStack.cap;
items = new int[aStack.cap]();
for (int i = 0; i < aStack.size; i++)
this->push(aStack.items[i]); //Adds an item if not full and increments size
// I have also tried: items[i] = aStack.items[i]
}
//Destructor
Stack::~Stack()
{
cap= 0;
size= 0;
delete [] items;
items = NULL;
}
我感觉我做错了复制构造函数,但我不知道它是什么。
【问题讨论】:
-
您不应该循环到大小而不是顶部元素吗?堆栈通常有可索引的元素吗?
-
并且
top永远不会在复制构造函数中为新对象设置。 -
等等,为什么
top不是一个函数(如果没有函数,我也认为size也是如此)? -
对不起,我应该指定的。我正在从数组中构建一个堆栈。所以当你看到 stack 这个词时,它就是类“stack”,它包含一个动态分配的数组。
-
在调用
push()之前尝试初始化size成员
标签: c++ segmentation-fault destructor copy-constructor dynamic-allocation