#c
Например: char **twoarray = (char **) malloc(2 * sizeof(char *)); // выделено *(twoarray + 0) = (char *) malloc((1 + 1) * sizeof(char)); // выделено *(twoarray + 1) = (char *) malloc((1 + 1) * sizeof(char)); // не выделено if (*(twoarray + 1) == NULL) { free(*(twoarray + 0)); // очистка free(twoarray); // очистка exit(-1); } Просто, когда работаешь с трёхмерными массивами ещё и в цикле, то очищать становится сложнее..
Ответы
Ответ 1
В принципе не обязательно. Тем более в C, где удаление памяти не связано автоматически с вызовом деструктора. И тем не менее пару причин есть. Во-первых, для выращивания в себе хорошей привычки - поигрался - положи на место. А во-вторых, а вдруг в будущем этот exit(1) превратится всего лишь в return в новой версии? Вспомните ли вы тогда, что там должно быть освобождено?Ответ 2
Хоть операционная система и высвобождает память и прочие ресурсы при уничтожении адресного пространства процесса, обязательность возврата памяти нужна в случае профилирования утечек памяти. Дело в том, что у ОС нет возможности определить, какие участки памяти оставили умышленно, для оптимизации, а какие остались случайно, из-за потери указателей на них. Поэтому отсутствие очистки перед выходом сильно засоряет отладочный вывод, из-за чего можно пропустить действительно важную запись об утечке.Ответ 3
Не очищать память - плохой стиль программирования, так как утечка памяти может привести к плохим последствиям( Капитан очевидность)
Комментариев нет:
Отправить комментарий