大小/ 2的数组始终未定义

时间:2014-09-23 23:33:28

标签: c++ linked-list stack

我有一个非常奇怪的错误,我的数组总是未定义大小/ 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--;
}

和for循环使用是:

for (int i=testSize2; i>0; i--) {
    if (iStackBig.top() != i) {
        workedStk = false;
    }
    iStackBig.pop();
}

我无法理解为什么在每个节点数组中未定义位置16000。我做了什么明显的错误吗?

1 个答案:

答案 0 :(得分:1)

我看到一个问题:

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

使用先前删除的指针调用未定义的行为,这可能是您的问题的根源。当您从空堆栈弹出时,您还应检查stackTopstackTop->link是否为NULL。