Если вы не знаете точный размер памяти, которую нужно использовать, вам понадобится динамическое выделение ( malloc
). Примером может быть ситуация, когда пользователь открывает файл в вашем приложении. Вам нужно будет прочитать содержимое файла в памяти, но, конечно, вы не знаете размер файла заранее, поскольку пользователь выбирает файл на месте, во время выполнения. Так что в основном вам нужно, malloc
когда вы заранее не знаете размер данных, с которыми работаете. По крайней мере, это одна из основных причин использования malloc
. В вашем примере с простой строкой, размер которой вы уже знаете во время компиляции (плюс вы не хотите ее изменять), нет смысла динамически выделять ее.
Немного не по теме, но ... вы должны быть очень осторожны, чтобы не создавать утечек памяти при использовании malloc
. Рассмотрим этот код:
int do_something() {
uint8_t* someMemory = (uint8_t*)malloc(1024);
if ( ) return -1;
free(someMemory);
return result;
}
Вы видите, что не так с этим кодом? Там это условный оператор возврата между malloc
и free
. Сначала это может показаться нормальным, но подумайте об этом. Если произойдет ошибка, вы вернетесь, не освобождая выделенную память. Это частый источник утечек памяти.
Конечно, это очень простой пример, и здесь очень легко увидеть ошибку, но представьте себе сотни строк кода, усеянных указателями, malloc
s, free
s и всеми видами обработки ошибок. Все может очень быстро запутаться. Это одна из причин, по которой я предпочитаю современный C ++ в соответствующих случаях, но это уже совсем другая тема.
Поэтому всякий раз, когда вы используете malloc
, всегда убедитесь, что ваша память как можно free
хуже.
malloc()
может потерпеть неудачу!