错误:释放指针未分配在矢量模板类C 中
error: Pointer being freed was not allocated in vector template class c++
我正在构建一个模板类向量,并且我遇到了错误的" 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; }
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何在向量中释放指针?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 错误:释放指针未分配在矢量模板类C 中
- 如何在指针初始化为数组的第一个索引后释放指针
- 如何释放指针树中的所有内存
- 从 std::align 中释放指针
- C :释放指针没有分配在课堂上
- 构造向量 C++ 后无法释放指针
- nullptr是否释放指针的内存
- C/C++ 通过调用引用或直接释放指针
- 分段释放指针向量的错误
- 有效地从指向对象本身释放指针
- 如何释放指针向量中的元素
- Sqlite c/c++api,负责从sqlite3_column_text中释放指针
- 释放指针后分配给指针
- 正在释放指针