使用Valgrind时的一般保护故障

时间:2020-05-27 06:58:47

标签: segmentation-fault gdb valgrind massif

由于没有我的许可而事先不添加代码的道歉。

我有一个程序,在使用Valgrind地块工具启动后,经过2-10s的可变时间后,在某些系统上崩溃了。 与gdb相同运行或按原样运行应用程序不会导致任何崩溃。

这很好用- valgrind --tool=massif --pages-as-heap=yes ./<prog> <prog_args>

这将导致程序因SIGSEGV而中止 valgrind --tool=massif --stacks=yes ./<prog> <prog_args>

程序以Valgrind终止时,回溯顶部的函数是这样的,行号指向带有标志的if条件语句:

<enum_type>
tmr_fn(ctx *ctx, tmr_t *tmr, const char *fn, unsigned int ln)
{
    int ret = ENUM_0
    if (ctx == NULL || tmr == NULL)
        return (ENUM_ERR);

    if (tmr->flags & 0x1) {
        tmr->flags |= 0x2;
        return (0);
    }
...
}

我尝试寻找答案,但是还没有发现任何有用的东西。任何帮助或指针都将非常棒!

1 个答案:

答案 0 :(得分:0)

运行带有memcheck的程序表示未初始化的值。我发现已经声明了tmr结构,但是memset尚未完成,并且具有一些垃圾值。这导致在释放例程中调用的tmr_fn中出现问题。

相关问题