C++ 为什么我会得到一个触发断点?

C++ 为什么我会得到一个触发断点?,c++,pointers,C++,Pointers,我正在尝试创建我自己的vector类,我想我已经实现了所有正确的东西,但是我得到了这样一个错误:“main.exe触发了一个断点”。程序运行良好,直到它超出范围,然后我的析构函数抛出这个异常,我认为我创建的容量容器有问题 template<typename A> inline void myVector<A>::capacityChange(int size) { if (size <= _capacity) { return; } A * newVecto

我正在尝试创建我自己的vector类,我想我已经实现了所有正确的东西,但是我得到了这样一个错误:“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;

}
模板
内联void myVector::capacityChange(整数大小)
{

如果(尺寸我想你的问题可能在这里:

template<typename A>
inline myVector<A>::myVector(const size_t &size, const A &value):   
           _size(size), _capacity(2 * size)
{
   _data = new A[size]();
模板
内联myVector::myVector(常量大小、常量A和值):
_尺寸(尺寸),_容量(2*尺寸)
{
_数据=新的[尺寸]();

在这个构造函数中,您将
\u capacity
设置为
2*size
,但您只分配了
size
对象数组。这意味着以后,当您的
main()
函数调用
push\u back()
,它将很高兴地写过
\u数据
数组的末尾,然后最终重新分配到更大的
\u数据
数组;到那时,堆已损坏,这就是
删除
调用稍后崩溃的原因(您在数组末尾的写操作可能重写了堆的一些元数据,而这些元数据正是堆正常工作所依赖的)

我很好奇
test.vectorCapacity()
test.size()
是。尽管我不认为这段代码会导致问题,但您应该了解三法则或五法则。我会了解它,容量和大小只是我用于向量管理内存的两个变量。为什么要删除代码中实际包含问题的部分?我理解,数组大小e仍然可以是不同的,只要我已经分配了更多…稍后当大小与容量相同时,它将重新分配给更大的阵列。谢谢先生!