Эта очень простая программа на 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);
}