C ++ Stack泛型类,int变量将32765作为值而不是1

时间:2016-03-17 21:28:45

标签: c++ qt variables

标题大部分都是这样说的。我的变量“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;
}

1 个答案:

答案 0 :(得分:3)

您的构造函数不会将长度设置为零。当你将它用作数组索引时,你会踩踏内存,破坏数据。