错误:释放指针未分配在矢量模板类C 中

error: Pointer being freed was not allocated in vector template class c++

本文关键字:释放 指针 分配 错误      更新时间:2023-10-16

我正在构建一个模板类向量,并且我遇到了错误的" malloc:object xxxxxxxxxx的错误:未释放指针"是。这些方法是我使用的唯一使用变量t *数据的方法。

template <class T>
class vector
{
public:
   // constructors and destructors
   vector()                         { numElements = 0; numCapacity = 0; }
   vector(int num)                  throw (const char *);
   vector(const vector & rhs)        throw (const char *);
  ~vector()                         { delete [] data;   }
   vector & operator = (const vector & rhs) throw (const char *);
   int  size()     const { return numElements;                 }
   int  capacity() const { return numCapacity;                 }
   bool empty() const { return numElements == 0 ? true : false; }
   T & operator [] (int index)       throw (const char *)
   {
      return data[index];
   }
   const T & operator [] (int index) const throw (const char *)
   {
      return data[index];
   }
private:
   T * data;       
   int numElements; 
   int numCapacity;
};

这是我的复制构造函数,无默认的构造函数和分配运算符

template <class T>
vector <T> & vector <T> :: operator = (const vector <T> & rhs)
          throw (const char *)
{     
     if (rhs.size() == 0) {
            this->data = NULL;
            numElements = 0;
            numCapacity = rhs.capacity();
            return *this;
      }
      if (numCapacity < rhs.numElements) {
            try {
                  data = new T[rhs.numElements];
            } catch(std::bad_alloc) {
                  throw "ERROR: Unable to allocate buffer";
            }
      for (int i = 0; i < numCapacity; i++)
            data[i] = rhs.data[i];
      }
   return *this;
}

template <class T>
vector <T> :: vector(const vector <T> & rhs) throw (const char *)
{
   assert(rhs.capacity() >= 0);
   if (rhs.numCapacity == 0)
   {
      numCapacity = 0;
      numElements = 0;
      this->data = NULL;
      return;
   }
   try
   {
      data = new T[rhs.numCapacity];
   }
   catch (std::bad_alloc)
   {
      throw "ERROR: Unable to allocate buffer";
   }
   numCapacity = rhs.numCapacity;
   numElements = rhs.size();
   for (int i = 0; i < numCapacity; i++)
      data[i] = rhs.data[i];
}
template <class T>
vector <T> :: vector(int num) throw (const char *)
{
   assert(num >= 0);
   numElements = 0;
   if (num == 0)
   {
      numCapacity = 0;
      this->data = NULL;
      return;
   }
   // attempt to allocate
   try
   {
      data = new T[num];
   }
   catch (std::bad_alloc)
   {
      throw "ERROR: Unable to allocate buffer";
   }      
   numCapacity = num;
}

任何帮助都非常感谢

默认构造函数未初始化 data

vector() { numElements = 0; numCapacity = 0; data = NULL; }