Динамическое увеличение массива в C ++

У меня есть массив указателей объектов CName. У меня есть следующий конструктор, который инициализирует мой массив размером один. Затем, когда я добавляю объект, я вырабатываю массив на 1 и добавляю новый объект. Он компилируется отлично, однако, когда я пытаюсь распечатать их, я просто получаю ошибку ошибки сегментации. Можете ли вы посмотреть и посмотреть, что я делаю что-то неправильно?

//constructor Names_Book::Names_Book() { grow_factor = 1; size = 0; cNames = (CName**)malloc(grow_factor * sizeof(CName*)); cNames[0] = NULL; } void Names_Book::addCName(CName* cn) { int oldSize = size; int newSize = size + 1; CName** newCNames = (CName**)malloc(newSize * sizeof(CName*)); for(int i=0; i<newSize; i++) { newCNames[i] = cNames[i]; } for(int i=oldSize; i<newSize; i++) { newCNames[i] = NULL; } /* copy current array to old array */ cNames = newCNames; delete(newCNames); size++; } 

Чтобы иметь динамически растущий массив в C ++, вы должны использовать std::vector или хотя бы посмотреть на его реализацию.

В этой функции есть несколько ошибок:

 void Names_Book::addCName(CName* cn) { int oldSize = size; int newSize = size + 1; CName** newCNames = (CName**)malloc(newSize * sizeof(CName*)); for(int i=0; i 

Ближе к концу вы делаете две вещи совершенно неправильно. (См. Выше).

Эти две последние строки должны быть следующими:

 free(cNames); cNmaes = newCNames; 

Кроме того, вы должны сделать realloc, а не медленно копировать элементы один за другим ....

С учетом сказанного вам следует использовать вектор. Не пытайтесь (плохо) переписать то, что уже существует.

Первый цикл должен быть в oldSize:

 for(int i=0; i 

cNames недостаточно для newSize.