C++ 为什么我会得到一个触发断点?
我正在尝试创建我自己的vector类,我想我已经实现了所有正确的东西,但是我得到了这样一个错误:“main.exe触发了一个断点”。程序运行良好,直到它超出范围,然后我的析构函数抛出这个异常,我认为我创建的容量容器有问题C++ 为什么我会得到一个触发断点?,c++,pointers,C++,Pointers,我正在尝试创建我自己的vector类,我想我已经实现了所有正确的东西,但是我得到了这样一个错误:“main.exe触发了一个断点”。程序运行良好,直到它超出范围,然后我的析构函数抛出这个异常,我认为我创建的容量容器有问题 template<typename A> inline void myVector<A>::capacityChange(int size) { if (size <= _capacity) { return; } A * newVecto
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仍然可以是不同的,只要我已经分配了更多…稍后当大小与容量相同时,它将重新分配给更大的阵列。谢谢先生!