标题说明了大部分内容。我的变量“full”的值为3276而不是0;

这是我的标题;

#ifndef GENERICSTACK_H
#define GENERICSTACK_H

#include <iostream>

using namespace std;

template <class T> class genericStack
{
    int MaxItems;
    T* stack;

    int empty;
    int full;
    int length;

public:

    genericStack(int);
    void push(T);
    T pop();
};

#endif // GENERICSTACK_H

这是我的.cpp文件

实际上,只有构造函数很重要。因为Qt调试器显示它不会更改构造函数中的值。最初是32765。
#include "genericstack.h"

template <class T> genericStack<T>::genericStack(int size)
{
  MaxItems = size;

  stack = new T[MaxItems];

  empty = 1;
  full = 0;
}

template <class T> void genericStack<T>::push(T item)
{
  if(full == 1)
{
    cout << "The stack is full.";
  }else
{
    stack[length] = item;
    length++;
    empty = 0;
}

if(length == MaxItems)
    full = 1;

}

template <class T> T genericStack<T>::pop()
{
  T temp;

  if(empty == 1)
    {
      cout<< "The stack is already empty.";
      return NULL;
  }else
    {
      temp = stack[length];
      stack[length] = NULL;
      length--;
      full = 0;
    }

    if(length == 1)
        empty = 1;

    return temp;
}

最佳答案

您的构造函数未将长度设置为零。当将其用作数组索引时,会占用内存,从而破坏数据。

10-08 11:30