Мне задана задача, где мне нужно создать функцию string_copy. Обратите внимание, что тело функции и прототипы были предоставлены источником и должны быть сохранены. Части, написанные мной, после комментария write your code here
.Удаление динамически распределенной памяти
#include <iostream>
using namespace std;
int string_length(const char* string_c);
char* string_copy(const char* string_c);
int main()
{
const char* string_c = "This is a string and is a long one so that we can create memory leaks when it is copied and not deleted";
// write your code here
int length = string_length(string_c);
cout << "Copied String: " << string_copy(string_c) << endl;
return 0;
}
int string_length(const char* string) {
int length = 0;
for (const char* ptr = string; *ptr != '\0'; ++ptr) {
++length;
}
return length;
}
char* string_copy(const char* string) {
// we need to add 1 because of ’\0’
char* result = new char[string_length(string) + 1];
// write your code here (remember zero-termination !)
int i;
for (i = 0; string[i] != '\0'; ++i)
{
result[i] = string[i];
}
result[i] = '\0';
return result;
}
Теперь задача говорит мне
, что очень важно, чтобы любая память, выделенная с е = новым типом выпущен позже с удалением е (и = новым типом [размером] с удалением [ ] a) иначе это приведет к ошибке.
Непонятно, существует ли ошибка compile/runtime error
или ошибка, как в моей задаче не соответствовала требованию ошибки.
Мой вопрос: в этом коде как удалить промежуточный динамически созданный массив result
? Если я удалю result
, не будет ли это результатом задачи? Тогда как я должен соблюдать приведенную выше цитату или, может быть, имитировать утечку памяти, как указано в строковой константе long
?
Спасибо.
EDIT: Почему отрицательные голоса? Пожалуйста, объясните хотя бы причину! Я не прошу какого-либо решения или чего-то еще, но простое предложение, если я пропущу какой-то момент или нет!
В отрицательных голосах нет ненависти. Они просто отмечают, что этот вопрос не подходит для будущих пользователей сайта. Только посмотрев на ваш вопрос: есть похожие вопросы. Если вы просто прочитали вопросы и ответы по связанным вопросам, вы можете получить свой собственный ответ. К сожалению, не все готовы потратить время на конструктивную критику. –
@CraigYoung Я думаю, что техническая часть вопроса может иметь схожие вопросы уже, но в моем случае я хотел понять ожидаемое задание (в вопросе) от меня (поскольку, как я полагал, возможно, я не знаю намерения задачи, поскольку я не очень хорошо разбирающийся в языке), а не точно техническое решение.Я думаю, что я достаточно разбираюсь в Q & A и читал его более одного раза, я бы сказал, что отрицательные голоса соответствуют общему элитарному мышлению, обсуждаемому здесь: http://meta.stackexchange.com/questions/9953/could-we-please -be-a-bit-nicer-to-new-users –
Я не могу говорить за нисходящих избирателей. Но мне ясно, что ваш вопрос полезен только для чрезвычайно узкой аудитории. К сожалению, задача, которую вы назначили, делает ваш вопрос несколько надуманным. Это усугубляется деталями задания, не использующими правильную терминологию. Существует огромное различие между «привести к ошибке» и «привести к утечке памяти». –