GOOGLE ADS

четверг, 14 апреля 2022 г.

Передать параметр в atexit()

В моей программе я использую статическую переменную (иначе поступить невозможно), и проблема в том, что ее нужно освобождать при выходе.

Как я могу добиться этого, не объявляя эту переменную глобальной?

Я думал о atexitфункции, но, похоже, она не может принять аргумент. Нет ли какой-нибудь хитрости, чтобы передать мою переменную?

Спасибо.


Решение проблемы

Я предполагаю, что под «глобальным» вы подразумеваете, что не хотите использовать переменную с областью действия файла, и что под «статическим» вы имеете в виду статическую локальную переменную в функции, а не одно из других 19 значений этого слова. Вы не дали достаточно контекста, так как, несомненно, есть более чистое решение, но вы могли бы добавить параметр в функцию, в которой объявлена ​​​​эта переменная, и сделать что-то вроде:

void
foo(int exit_flag,...)
{
static int * x = NULL
if( exit_flag ){
/* cleanup */
free(x);
return;
}
...
}

Всегда вызывайте foo с exit_flag == 0, за исключением обработчика выхода, когда вы устанавливаете exit_flag.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...