В моей программе я использую статическую переменную (иначе поступить невозможно), и проблема в том, что ее нужно освобождать при выходе.
Как я могу добиться этого, не объявляя эту переменную глобальной?
Я думал о atexitфункции, но, похоже, она не может принять аргумент. Нет ли какой-нибудь хитрости, чтобы передать мою переменную?
Спасибо.
Решение проблемы
Я предполагаю, что под «глобальным» вы подразумеваете, что не хотите использовать переменную с областью действия файла, и что под «статическим» вы имеете в виду статическую локальную переменную в функции, а не одно из других 19 значений этого слова. Вы не дали достаточно контекста, так как, несомненно, есть более чистое решение, но вы могли бы добавить параметр в функцию, в которой объявлена эта переменная, и сделать что-то вроде:
void
foo(int exit_flag,...)
{
static int * x = NULL
if( exit_flag ){
/* cleanup */
free(x);
return;
}
...
}
Всегда вызывайте foo с exit_flag == 0, за исключением обработчика выхода, когда вы устанавливаете exit_flag.
Комментариев нет:
Отправить комментарий