最重要的是让我说我已经找到了答案,我找不到任何解释为什么我遇到问题。
我是学生,我现在正在学习C ++
所以在告诉我不要以这种方式使用C ++之前,请允许我告诉你,它是出于学习目的和对某些概念的理解。
程序在最后一次声明时崩溃。 delete [] tempVector; 我无法理解为什么它会发生,因为delete [] vector;工作得很好。
错误:使用arr.exe播放已触发断点
请帮助我理解我做错了什么。
非常感谢你。
class BetterArray
{
private:
int* vector;
int count;
public:
BetterArray(int value);
BetterArray(int* vec, int size);
~BetterArray();
void add(int value);
int* getArray();
};
BetterArray::BetterArray(int value)
{
count = 1;
vector = new int[1];
vector[0] = value;
}
void BetterArray::add(int value){
int* tempVector = new int[count + 1];
for (int i = 0; i < count; i++)
tempVector[i] = vector[i];
tempVector[count] = value;
count++;
delete[] vector;
vector = tempVector;
delete[] tempVector; // programa crahses here.
}
答案 0 :(得分:3)
delete
上的崩溃通常是堆损坏的结果。将tempVector
指针指向vector
时,指针指向同一内存位置。因此,删除tempVector
也会删除vector
。 vector
现在指向未分配的内存。
现在假设您写入vector
,您正在写入未分配的内存,这将破坏堆。在此之后会发生什么是未定义的行为,但如果堆管理器检测到损坏,它通常会崩溃。