char * names(char * fname = new char[ 15 ], char * lname new char[ 25 ])
{
lname[ strlen(lname) ] = ','; //adds a comma
lname[ strlen(lname) ] = ' '; //adds a space(lastname, firstname)
strcat(lname, fname); //concatenate fname to lname
delete[ ] fname; //delete array
return lname; //return lname
delete[ ] lname; //delete array
}
У меня нет большого опыта работы с динамическими массивами на C++, но я использую его в функции, которую я создал. Мое понимание заключалось в том, что вы можете освободить память после того, как вы сделали, используя массив. Но программа сработает, если я удалю ее перед использованием оператора return: Вот эта функция:Удаление динамического массива в C++
Это приводит к сбою, если я запускаю его, но если я переведу оператор delete [] fname после возвращаемого statmenet, он работает просто хорошо. Почему он сбой, когда я удаляю [] fname перед оператором return? Я конкатенировал fname в lname и возвратил lname. Не имеет значения, удаляю ли я массив fname перед возвратом? Или вы не можете выпускать такую память?
Pleeeease не выполняет управление памятью самостоятельно. Вместо этого используйте 'std :: string' для вашего конкретного варианта использования. –
Что касается вашего вопроса, ваш оператор 'delete [] lname;' никогда не выполняется, потому что раньше у вас есть 'return'. Вероятно, _crash_, потому что ваши распределения массивов слишком малы, чтобы удерживать результат, созданный 'strcat()'. –
И, по крайней мере, код, который вы показываете в своем вопросе, не компилируется. –