所以我有以下类方法(如果需要可能会添加更多):
编辑 1:
这里是 paObject 被初始化的地方以及它如何保持直到到达 setCapacity(int c)
。
template <Object>
ArrayClass<Object>::ArrayClass()
{
_size = 0; //default in case allocation fails
paObject = new Object[ARRAY_CLASS_DEFAULT_SIZE];
if (paObject == NULL)
throw Exception();
_size = ARRAY_CLASS_DEFAULT_SIZE;
}
重要的是要注意我的类 Vector extends(或者它在 c++ 中的任何内容)ArrayClass
: class MyVector: virtual public ArrayClass<Object>{}
然后在稍后
template <class Object>
MyVector<Object>::MyVector() : ArrayClass<Object>()
{
_currSize = 0;
_incFactor = 5;
}
它强制调用 ArrayClass 构造函数。
template <Object >
void MyVector<Object>::setCapacity(int c)
{
int len = _currSize;
if (len > c) len = c;
Object* paNew = new Object[c];
if (paNew == NULL) throw Exception();
for (int i = 0; i < len; i++)
paNew[i] = paObject[i];
if (paObject != NULL)
delete[] paObject;
paObject = paNew;
_size = c;
if (_currSize > len)
_currSize = len;
}
发生错误时,c的值为6
_currSize(类私有(private) int 变量)的值为 1
.值得注意的是,paObject 是一个 Object 类型的类指针(它是一个模板......等等)在错误发生时用大小为 1 的对象数组初始化(Object* paObject = new Object[1]
)。
在到达 delete[] paObject;
行之前一切都正常执行在这一点上它给了我一个 Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
错误。
我真的不明白哪里出了问题。 帮助将不胜感激。
最佳答案
当您遇到堆问题时会出现此错误。
像这样的东西:
int *a = new char[1];
a[500] = 0;
然后,在完全不相关的对象上,您将在 delete
或 new
上收到错误。
关于c++ - 删除数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12646254/