c++ - 删除数组错误

标签 c++ arrays delete-operator

所以我有以下类方法(如果需要可能会添加更多):

编辑 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;

然后,在完全不相关的对象上,您将在 deletenew 上收到错误。

关于c++ - 删除数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12646254/

相关文章:

iOS parse.com 推送错误

mysql - MYSQL 中的 UNNEST 函数类似于 POSTGRESQL

c# - 使用 array.sort 对数组进行排序

c++ - 删除动态分配的数组与单个指针

c++ - 为什么我可以做 "delete p;",而不是 "delete (p+1);"?为什么 delete 需要左值?

c++ - 使用 const 指针打印双链表

c++ - 英特尔 x64 的 GCC 中指向整数的指针对齐

c++ - #define macro() <...> 做什么?

c++ - Visual C++ 10 中 EasyHook 的链接器问题

java - C++ 和 Java 的字符串循环性能比较