2015-08-15 56 views
0

(我不是張貼我的代碼,因爲這是一個項目,但是我試圖讓這個問題的幫助,但有沒有運氣)動態內存分配初始化在C++類

您好,我是試圖初始化一個指針數組的大小(char*)這是我的類的私有成員變量class A

我使用構造函數來設置一個整數變量(也是一個成員變量)來設置大小然後用來創建我的指針數組。

我有這個迄今所做的:

// Constructor - 'int value' is set to a value 
private: 
    int value; 
    char ** myArray = new char*[value]; 

所以基本上我想要的指針,其中每個元素可以指向一個字符串數組。我傳遞字符串變量myArray使用(char*stringVar.c_str();

雖然所有的這個作品,我想存儲變量時,得到了一些非常奇怪的錯誤,甚至已經得到了這個錯誤:

free(): invalid next size (fast)

這是奇怪,因爲即使myArray是大小爲4,當我嘗試訪問,比如說,第3元,我得到了同樣的錯誤如上。

我很新的C++和我解決了這些問題很意圖。我不得不求助於這個論壇尋求幫助,並期待着來自你們的一些想法:)

+0

使用'的std ::矢量'似乎更好。 – Jarod42

+0

您可能試圖釋放不是由malloc的分配的指針(或刪除不是由新創建的對象),或者您可能試圖釋放/刪除這樣一個對象不止一次。 –

+0

我懷疑編譯器不喜歡「new char * []」位。爲什麼不嘗試類似:「char * myArray = new char [value];」 – 2015-08-15 12:43:46

回答

0

如果你是新的C++程序員,並希望與C++一起工作字符串列表更好的工作與std::vector<std::string>完整的教程如何使用載體見: http://www.cplusplus.com/reference/vector/vector/

但在你的問題是字符串列表大小固定?或不? 如果字符串列表是不固定的,你必須在構造函數中的malloc數組首次空間,然後realloc的數組,當你想在你的字符串列表,例如插入一個字符串:

class A{ 
    private: 
     char** arrayy; 
     int arrayysize; 
    A(){ 
    arrayy = (char**)calloc(1,sizeof(char*)); 
    arrayysize = 1; 
    } 
    insertToarrayy(char* data){ 
     strcpy(arrayy[arrayysize-1],data); 
     arrayy = (char**)realloc(arrayy,arrayysize+1); 
     arrayysize += 1; 

    } 

}