2013-10-17 33 views
0

我想創建一個數組,它在填充時會導致創建一個新的更大的數組,它會將舊數組的值複製到前一個數組中,並將繼續向從舊的那個中斷的新陣列。我的代碼工作正常,而我將在第一個陣列,但一旦我打電話追加我已經填補了原來的排列後,我最終得到一個奇怪的錯誤:我得到了一個glibc檢測到的錯誤

*** 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; 
    } 
+0

delete [] array在錯誤的地方。應在循環操作完成後執行。 – user2784234

+1

我被空白蒙上了一層陰影。 – crashmstr

+0

@ user2784234嗯,我做到了。我不再有錯誤,但當我嘗試測試數組[16]或更高版本時,它只是給出了0 – FrostyStraw

回答

0

您分配一個數組的語法是錯誤的 - 而不是

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

(這將創建一個新的int和與值初始化它大小+ 16),你需要

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

它創建一個大小爲+16的元素的新int數組。

+0

嗯,你說得對。然而,我解決了這個問題,而且當我嘗試查看數組[16]時,仍然只得到0,即使當我調用append時,我將4作爲參數 – FrostyStraw