snprintf в обработчике сигналов создает ошибку сегментации при запуске с valgrind

Эта очень простая программа на c выдает ошибку сегментации при запуске с valgrind. Он работает нормально, когда запускается нормально. Он аварийно завершает работу, когда вы отправляете процессу сигнал USR1.

Проблема, похоже, заключается в том, как printf обрабатывает форматирование значения с плавающей запятой, потому что он отлично работает, если вы используете строку (% s) или int (% d) параметр формата.

PS Я знаю, что вам не следует вызывать какие-либо функции семейства printf внутри обработчика сигналов, но все же почему он вылетает только с valgrind.

    #include <stdio.h>
    #include <signal.h>

    void sig_usr1(int sig) {
            char buf[128];
            snprintf(buf, sizeof(buf), "%f", 1.0);
    }

    int main(int argc, char **argv) {
            (void) signal(SIGUSR1, sig_usr1);
            while(1);
    }
5
задан Employed Russian 21 July 2011 в 03:13
поделиться