C++ 对象可能在释放C++;?

C++ 对象可能在释放C++;?,c++,dynamic-arrays,dynamic-allocation,C++,Dynamic Arrays,Dynamic Allocation,此函数用于将元素插入到动态数组中。当我注释掉delete[]数组时,会出现此错误,但如果我不注释,则一切正常。。这就是我插入阵列的过程。安迪,你知道为什么吗 错误:已释放对象的校验和不正确-对象可能在被释放后被修改。 ***在malloc\u error\u break中设置断点以进行调试 #include <iostream> #include "dynamic_array.h" using namespace std; dynamic_array::dynamic_arra

此函数用于将元素插入到动态数组中。当我注释掉delete[]数组时,会出现此错误,但如果我不注释,则一切正常。。这就是我插入阵列的过程。安迪,你知道为什么吗

错误:已释放对象的校验和不正确-对象可能在被释放后被修改。 ***在malloc\u error\u break中设置断点以进行调试

#include <iostream>

#include "dynamic_array.h"

using namespace std;

dynamic_array::dynamic_array() {
    try {
        array = new int[0];
                size = 0;
        allocated_size = 5;
    } catch ( const std::bad_alloc& e ) {
            throw exception(MEMORY_EXCEPTION);
    }           
}

dynamic_array &dynamic_array::operator=(const dynamic_array &a) {

    return *this;
}

dynamic_array::~dynamic_array() {
    delete [] array;
}

int dynamic_array::get_size(void) const {
    return size;
}

int dynamic_array::get_allocated_size(void) const {
    return allocated_size;

}

int& dynamic_array::operator[](unsigned int i) {
    if (i >= get_size())
        throw exception(SUBSCRIPT_RANGE_EXCEPTION);
    else
        return array[i];
}

const int& dynamic_array::operator[](unsigned int i) const {
    if (i >= get_size())
        throw exception(SUBSCRIPT_RANGE_EXCEPTION);
    else
        return array[i];

}

void dynamic_array::insert(int x, int i) {

    try {if (i < 0 || i > get_size())
        throw exception(SUBSCRIPT_RANGE_EXCEPTION);
        if(size == 0){
        array[i] = x;
        size++;}
        else if(allocated_size == size){
            int *array2;
            array2 = new int[allocated_size+5];
            allocated_size += 5;
            for(int j=0;j<=size-1;j++)
            array2[j] = array[j];
            //delete [] array;
            array = array2;
            shift_right(i,size-1,1);
            array[i] = x;
            size++;
        }
        else{
            shift_right(i,size-1,1);
            array[i] = x;
            size++;
        }
    } catch ( const std::bad_alloc& e ) {
            throw exception(MEMORY_EXCEPTION);
    }
}

void dynamic_array::shift_right(int start, int end, int delta) {
    if(0 <= start && start <= end & end <= size){
    int temp [size];
    int s = 0;
    for(int i = start; i <= end; i++){
    temp[s] = array[i];
    s++;
    }
    int d = 0;
    for(int j = start + delta ; j< sizeof(temp)+end; j++){
    array[j] = temp[d];
    d++;}
}
#包括
#包括“dynamic_array.h”
使用名称空间std;
动态数组::动态数组(){
试一试{
数组=新整数[0];
尺寸=0;
分配的_大小=5;
}捕获(常数标准::错误分配和e){
抛出异常(内存异常);
}           
}
动态数组和动态数组::运算符=(常量动态数组和a){
归还*这个;
}
动态数组::~动态数组(){
删除[]数组;
}
int动态数组::获取大小(void)常量{
返回大小;
}
int动态数组::获取分配的大小(void)常量{
返回分配的大小;
}
int&动态数组::运算符[](无符号int i){
如果(i>=get_size())
抛出异常(下标\范围\异常);
其他的
返回数组[i];
}
常量int&动态数组::运算符[](无符号int i)常量{
如果(i>=get_size())
抛出异常(下标\范围\异常);
其他的
返回数组[i];
}
void dynamic_数组::insert(int x,int i){
尝试{if(i<0 | | i>get_size())
抛出异常(下标\范围\异常);
如果(大小==0){
数组[i]=x;
大小+++;}
else if(分配的大小==大小){
int*array2;
array2=新整数[分配的大小+5];
分配的_大小+=5;

对于(int j=0;j右移位有问题,我必须重写。移位超出了分配给数组的大小,修复后错误消失了。

Did
array
new[]
ed?请提供一个。很可能您在调用ccde的某个位置有一个指向旧数组的指针,并且在删除该数组后正在使用它。上载了整个内容。
if(size==0){array[i]=x;
写入超出范围,因为您在该点之前只为0个整数分配了空间
array=new int[0];
分配的大小=5;
不完全匹配。