首页 > 解决方案 > strchr函数内的Valgrind memcheck错误

问题描述

Valgrind 在 strchr 函数中报告以下 memcheck 错误

==5801== Conditional jump or move depends on uninitialised value(s)
==5801==    at 0x34BB32865A: __strchr_sse42 (in /lib64/libc-2.12.so)

我将 gdb 链接到 valgrind 以可能遍历他的 strchr 代码,但我不能这样做。我所有的局部变量都已初始化,程序运行良好。我不明白 valgrind 错误来自哪里

bool 
Graph::CheckValues( cfgs_val_t & cfgs, const char * mval ) 
{ 

    int matched = 1, av = -1, ev = -1; char * mv, * p1, * p2, * p3, * fn, *                args; 
    cfgs_val_t::iterator iter; bool cfg_anyval = false;

    mv = strdup( mval );  
    p1 = mv;
    p2 = p1;
    for( ; ; )
    {
       if( *p2 == '=' )
       {
           *p2 = '\0';
            p3 = strchr( p1, '(' );  
            if( p3 != nullptr )
            {
                return true;
            }
     }
}

我的代码工作得很好,除了 valgrind 错误

标签: c++valgrind

解决方案


推荐阅读