我正在尝试创建自己的向量类,我想我已经实现了所有正确的东西,但是却收到此错误,提示“ main.exe触发了断点”。程序运行良好,直到超出范围,然后我的析构函数抛出此异常,我认为我创建的容量容器有问题。
template<typename A>
inline void myVector<A>::capacityChange(int size)
{
if (size <= _capacity)
{
return;
}
A * newVector = new A[size]; // Skapar ett nytt vector för det nya capacitet
//kopierar allt i det förra array till den nya
for ( int i = 0; i < _capacity; i++)
{
newVector[i] = _data[i];
}
for (int i = 0; i < size; i++)
{
std::cout << i << ": " << newVector[i] << std::endl;
}
_capacity = size;
delete[] _data;
_data = newVector;
}
答案 0 :(得分:2)
我认为您的问题可能在这里
template<typename A>
inline myVector<A>::myVector(const size_t &size, const A &value):
_size(size), _capacity(2 * size)
{
_data = new A[size]();
在此构造函数中,您已将_capacity
设置为2*size
,但仅分配了size
对象的数组。这意味着以后,当您的main()
函数调用push_back()
时,它将高兴地写到_data
数组的末尾,然后才最终重新分配给更大的_data
数组;到那时,您的堆已经损坏,这就是为什么您的delete
调用稍后崩溃的原因(您的writes-past-the-end-the-of-the-array可能覆盖了堆所依赖的某些元数据正确)