В этой функции есть несколько ошибок:
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[
}
for(int i=oldSize; i<newSize; i++)
{
newCNames[i] = NULL;
}
/* copy current array to old array */
cNames = newCNames; //right here you just leaked the memory cNames was pointing to.
delete(newCNames); // right here you delete the new array you just created using the wrong call.
size++;
}
Ближе к концу вы делаете две вещи совершенно неправильно.(Комментарий выше.)
Эти две последние строки должны быть:
free(cNames);
cNmaes = newCNames;
Кроме того, вы должны делать realloc, а не медленно копировать элементы один за другим ....
С учетом сказанного вам следует использовать вектор. Не пытайтесь (плохо) переписать то, что уже существует.