为什么我会触发断点?

时间:2018-07-20 03:20:26

标签: c++ pointers

我正在尝试创建自己的向量类,我想我已经实现了所有正确的东西,但是却收到此错误,提示“ 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;

}

1 个答案:

答案 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可能覆盖了堆所依赖的某些元数据正确)