Вы выделяете объект (char
), а затем забываете новый объект:
tempArr[i] = new char;
tempArr[i] = ingredients[i];
То, что вы хотите сделать, это установить вместо этого данные:
tempArr[i] = new char;
*(tempArr[i]) = *(ingredients[i]);
Этокак новый персонаж не теряется.
У вас также есть другая проблема, когда вы делаете delete [] ingredients;
, вы не удаляете базовые указатели.Затем вы позже удаляете временные подмассивы (delete [] tempArr[i]
), поэтому вам следовало бы сделать следующее:
for (int i = 0; i < numOfIng; ++i)
{
delete ingredients[i]; // Note that I remove the [], as you have only new char, not new char[1]
}
И потом не удалять, поскольку новый ingredients
использует эти "старые" tempArr
.
Также рассмотрите возможность использования векторов или уникальных указателей для вашего случая.