小编par*_*val的帖子

如果使用valgrind启动,信号处理程序中的snprintf会创建分段错误

这个非常简单的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);
    }
Run Code Online (Sandbox Code Playgroud)

c printf valgrind segmentation-fault

5
推荐指数
1
解决办法
2135
查看次数

标签 统计

c ×1

printf ×1

segmentation-fault ×1

valgrind ×1