Я работаю над проектом C (назначение для школы). Одним из требований является то, что в случае отказа malloc()
программа должна free()
выделить выделенную память и exit()
.Освобождение всей выделенной памяти в случае отказа
Рассмотрим случай, когда функция A()
создает связанный список и на каждой итерации обращается к другой функции, B()
. Теперь, если произошел сбой malloc на B()
, он должен free()
выделенной памяти, но функция A()
должна это сделать.
Все становится довольно сложным, если у вас есть дерево вызовов функций больше двух.
В моем предыдущем проекте я использовал флаг для уведомления об ошибке malloc() - если функция использует другую функцию, которая может использовать malloc()
, она должна проверить флаг сразу после. Это сработало, но код стал бесполезным.
Есть ли четкое решение этой проблемы?
Конечно, с «настоящими» приложениями вся память выделяется ОС, но я думаю, что этот спрос является педагогическим.
вы ищете типа ответа псевдо-код? –
Совсем нет. Я прошу об идее подхода \. – eggbaz
Я не уверен, почему я получаю эти downvotes. – eggbaz