C++ 我发现了一个glibc检测到的错误

C++ 我发现了一个glibc检测到的错误,c++,C++,我试图创建一个数组,当填充时,将创建一个新的更大的数组,将旧数组的值复制到以前的数组中,并将继续从旧数组停止的位置向新数组添加值。当我添加到第一个数组时,我的代码可以正常工作,但在填充原始数组后尝试调用append时,我最终会遇到一个奇怪的错误: *** glibc detected *** demo: double free or corruption (fasttop): 0x0000000000602010 *** 不知道发生了什么事!我真的不知道为什么 #include <ios

我试图创建一个数组,当填充时,将创建一个新的更大的数组,将旧数组的值复制到以前的数组中,并将继续从旧数组停止的位置向新数组添加值。当我添加到第一个数组时,我的代码可以正常工作,但在填充原始数组后尝试调用append时,我最终会遇到一个奇怪的错误:

*** glibc detected *** demo: double free or corruption (fasttop): 0x0000000000602010 ***
不知道发生了什么事!我真的不知道为什么

#include <iostream>

using namespace std;

class ArrayList {
public: 
    int* array;
public:
    int capacity = 0;
    int size = 16;

    ArrayList() {
        array = new int(size);
    }

    void append(int data) {
        if (size == capacity) {
            int* tmp = new int(size+16);
            for (int i = 0; i != size; i++) {
                tmp[i] = array[i];
                delete [] array;
            }
            array = tmp; 
        } else {
            array[capacity] = data;
            capacity++;
            // std::cout << *(array+15) << std::endl;
    }
#包括
使用名称空间std;
类数组列表{
公众:
int*数组;
公众:
int容量=0;
int size=16;
ArrayList(){
数组=新整数(大小);
}
无效附加(整型数据){
如果(大小=容量){
int*tmp=新int(尺寸+16);
for(int i=0;i!=size;i++){
tmp[i]=数组[i];
删除[]数组;
}
阵列=tmp;
}否则{
数组[容量]=数据;
容量++;

//std::cout分配数组的语法错误-而不是

int* tmp = new int(size+16);
(这将创建一个新的int并使用值size+16对其进行初始化),您需要

int* tmp = new int[size+16];

这将创建一个大小为+16个元素的新int数组。

delete[]数组位于错误的位置。它应该在循环操作完成后执行。我被空格蒙蔽了。@user2784234-hmm,我这样做了。我不再得到错误,但当我尝试测试数组中的内容时[16]或者更高,它只会给我0你的数组大小是16,索引从0到15-你对数组[16]和更高的期望是什么?@FrankSchmitt,但我创建了一个新的数组大小+16,然后让数组指向它。嗯,你是对的。但是,我修正了这一点,当我尝试查看数组[16]中的内容时,我仍然只能得到0,即使在调用append时,我将4作为参数