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