У меня есть программа C, которая выделяет несколько буферов, которые необходимо очистить, прежде чем программа завершит выполнение. Моя main
программа выглядит следующим образом
int main(int argc, char** argv){
// Some code
// ...
// ...
void* data1 = malloc(someSize);
void* data2 = malloc(someSize);
double* result = malloc(resultSize);
double* buffer = malloc(buffSize);
// Some code
// ...
// First exit point
if(someExitcondition){
// free all allocated memory
exit(1);
}
// Some code
// ...
// Second exit point
if(someOtherExitcondition){
// free all allocated memory
exit(1);
}
// Some code
// ...
// free all allocated memory
return 0;
}
Я хочу упростить очистку, просто вызвав функцию cleanUp()
, которая будет free
всю память, выделенную в куче. Я хочу вызывать эту функцию непосредственно перед каждым вызовом exit(1)
и перед строкой return 0
(по существу, каждый комментарий // free all allocated memory
заменяется вызовом cleanUp()
). Мой вопрос таков: как передать указатели data1
, data2
, result
и buffer
на cleanUp()
так, чтобы их можно было освободить?
Это что я думаю сделать. Это правильный подход?
void cleanUp(void* p1, void* p2, void* p3, void* p4){
// call to free for each pointer
}