0

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

1 に答える 1

0

配列を割り当てるための構文が間違っています-代わりに

int* tmp = new int(size+16);

(新しい int を作成し、size+16 で初期化します)、必要です

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

size+16 要素を持つ新しい int 配列を作成します。

于 2013-10-17T20:16:58.100 に答える