Я знаю, что любая динамически распределенная память ДОЛЖНА быть освобождена в конце ее использования, с free()
.
Нет. Не освобождение приводит к тому, что вашей программе остается меньше памяти для других целей. Это может (или не может) привести к тому, что объем памяти программы будет больше, чем в противном случае. В вопиющих, расширенных или экстремальных случаях (согласно оценке, зависящей от среды) это может означать, что недостаточно (виртуальной) памяти для обслуживания других приложений или для самой утечки. Но ни одна из этих вещей не означает, что вы должны освободить память. У вас всегда есть возможность принять последствия, если вы этого не сделаете.
По большей части незначительные преимущества, сопровождающие бессмысленное игнорирование освобождения выделенной памяти, никоим образом не уравновешивают негативное влияние на программу и на систему в целом. который он запускает, но есть случаи, когда он не вызывает каких-либо практических проблем. Все основные используемые сегодня операционные системы высвобождают выделенную память процессов при завершении процесса. Поэтому небольшие утечки в коротко работающих программах довольно несущественны на большинстве систем, с которыми вы, вероятно, столкнетесь, и необходимость освобождения памяти, которую нужно использовать до непосредственного завершения работы программы, является вопросом стиля, а не практичности.
И это приводит нас непосредственно к вашему примеру программы.
Однако, это идиоматическая c функция? Если он существует, то считается ли это незначительной проблемой, чтобы не освободить память в этом стиле кейса?
Я думаю, вы имели в виду "если он выходит ". Как уже говорилось выше, практически нет различий в практическом воздействии на программу или систему: освобождение вручную перед выходом из вызова верхнего уровня на main()
, с одной стороны, и оставление его для очистки ОС.
Хотелось бы узнать, можно ли использовать такую функцию, не беспокоясь об освобождении памяти каждый раз, хотя я в этом сомневаюсь.
Вы стоите в серьезной опасности причинить себе неприятности и другие, если вы пренебрегаете освобождением выделенной памяти, не обращая пристального внимания на то, будут ли это вызывать проблемы. При некоторых обстоятельствах вы можете go без освобождения, но было бы глупо sh сделать это, не беспокоясь об этом, так сказать. Более того, на вашем очевидном уровне опыта вы, возможно, еще не подготовлены к тому, чтобы выносить правильные суждения в этой области.
На самом деле я бы сказал иначе: быть уверенным, что свободная выделенная память, когда вы не больше не нужно, это беззаботная альтернатива. Или, по крайней мере, не волнуйтесь. Вы можете сделать это относительно легко, развивая методы программирования, которые его поддерживают.