我遇到了一个非常奇怪的错误,因为我的数组总是在大小/2时未定义。我有一个链接堆栈,每个节点都包含一个大小为32000
的数组,问题是在每个数组的位置16000
,由于某种原因,该值是未定义的。
节点是:
template <class myType>
struct nodeType {
myType dataSet[SIZE];
int top;
nodeType<myType> *link;
};
简单的推送和弹出是:
template <class myType>
void linkedStack<myType>::push(const myType& newItem)
{
//if the count is greater than the size of one node's array, create another
if(count % SIZE == 0) {
nodeType<myType> *newNode = new nodeType<myType>;
newNode->top = 0;
newNode->link = stackTop;
stackTop = newNode;
}
stackTop->dataSet[stackTop->top] = newItem;
count++;
stackTop->top++;
}
template <class myType>
void linkedStack<myType>::pop()
{
if(stackTop->top == 0) {
nodeType<myType> *toDelete = stackTop;
stackTop = stackTop->link;
delete stackTop;
}
stackTop->top--;
count--;
}
循环im使用的是:
for (int i=testSize2; i>0; i--) {
if (iStackBig.top() != i) {
workedStk = false;
}
iStackBig.pop();
}
我只是不明白为什么在每个节点数组中都没有定义位置16000
。我是不是做错了什么?
我看到的一个问题:
if (stackTop->top == 0) {
nodeType<myType> *toDelete = stackTop;
stackTop = stackTop->link;
delete stackTop; // You should be deleting toDelete here
}
stackTop->top--; // Oops, just used a deleted pointer
使用先前删除的指针会调用未定义的行为,这很可能是问题的根源。当您从空堆栈弹出时,还应该检查stackTop
或stackTop->link
在某个时刻是否为NULL。