Стандартное правило де-факто заключается в том, что часть кода, которая выполняла динамическое размещение, также отвечает за его освобождение.Поэтому, если ваша функция была в каком-то файле "toupper.c", то в этом же файле C должна быть доступна какая-то функция очистки.
Однако лучшие решения разделяют распределение памяти и алгоритмы.Это означает, что лучший способ написать эту функцию - это:
void toUpper (char* dst, const char* src)
{
while (*src!= '\0')
{
*dst= ...
...
dst++;
src++;
}
}
Здесь вызывающая сторона может выделять место для dst
, как ему угодно, это не дело алгоритма.Например:
char str1[] = "hello world";
char* str2 = malloc(strlen(str1) + 1);
toUpper(str2, str1);
...
free(str2);
Просто убедитесь, что функция документирована так, чтобы вызывающий абонент знал, что ему нужно выделить место для dst
- чтобы он был не меньше src
.
*.1013 * Как примечание:
char* temp = (char*) malloc(size);
не так, вы не выделили место для нулевого терминатора.Также ваш алгоритм должен обязательно скопировать нулевой терминатор в буфер назначения.