Столкнулся со странной проблемой. Есть функция, которая по какой-то причине валится. Я пытаюсь организовать вывод отладочных сообщений из нее в файл. Помимо этого она вызывает другие функции из того же файла, которые я тоже хочу залоггировать.
Пишу:
FILE *fp = NULL;
void f(void){
if (!fp) fp = fopen(«/tmp/log.txt», «a»);
...
if (fp) fprintf(fp, «something happened in f()\n»);
...
f2();
...
if (fp) fclose(fp);
return;
}
void f2(void)
{
if (fp) fprintf(fp, «something happened in f2()\n»);
}
т.е. вызов f2 меня интересует только если он происходит из f(), которая инициализирует указатель на файл. По идее все должно быть нормально, по факту нормально работает только первый раз, когда вызывается f(). Если она вызывается в цикле, то на втором fclose() программа вылетает с sigabrt. Если я переношу объявление *fp внутрь f() и убираю логи из f2(), все работает. Но мне нужно и из f2() логгировать тоже. Как можно наименее затратно это решить?
Цикл, вызывающий f() находится в другом файле, изменять который нельзя. Точнее можно, но нет смысла - f() и f2() это части библиотеки, которая линкуется статически к приложению, я тестирую с одной оберткой поверх библиотеки, чувак, у которого проблема проявляется - с другой, но т.к. проблема точно в самой библиотеке, то это не важно