2015-08-15 2 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, когда я пытаюсь получить доступ, скажем, к третьему элементу, я получаю ту же ошибку, что и выше.

Я очень новичок в C++ и очень хочу решить эти проблемы. Мне пришлось прибегнуть к этому форуму для помощи, и я с нетерпением жду некоторых идей от вас, ребята :)

+0

с использованием 'зОго :: вектора ' кажется лучше , – Jarod42

+0

Возможно, вы пытаетесь освободить указатель, который не был выделен malloc (или удалить объект, который не был создан новым), или вы можете пытаться освободить или удалить такой объект более одного раза. –

+0

Я подозреваю, что компилятор не любит бит «new char * []». Почему бы не попробовать что-то вроде: "char * myArray = new char [value];" –

ответ

0

Если вы новый программист на C++ и хотите работать со списком строк C++, лучше работать с std::vector<std::string> для полного руководства по тому, как использование векторов см. в: http://www.cplusplus.com/reference/vector/vector/

но у вас вопрос: размер строкового шрифта фиксированный? или нет? если строка список не фиксирован необходимо таНос пространство для массива впервые в конструкторе, а затем перераспределить массив, если вы хотите вставить строку в списке строки, например:

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; 

    } 

}