使用Valgrind时的一般保护故障

问题描述 投票:0回答:1

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

我有一个程序,从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);
    }
...
}

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

segmentation-fault gdb valgrind massif
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.