いっぱいになると新しい大きな配列が作成され、古い配列の値が前の配列にコピーされ、古い配列が残っていた場所から新しい配列に値を追加し続ける配列を作成しようとしています。オフ。最初の配列に追加している間はコードは正常に動作しますが、元の配列がいっぱいになった後に 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;
}