由于我没有权限而事先不添加代码的道歉。
我有一个程序,从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);
}
...
}
我尝试寻找答案,但还没有发现有用的东西。任何帮助或指针都将非常棒!
使用memcheck运行程序表示未初始化的值。我发现已经声明了tmr结构,但是memset尚未完成,并且具有一些垃圾值。这导致在释放例程中调用的tmr_fn中出现问题。