瓦尔格林德找不到无效的写入



我的程序正在以一种非常令人费解的方式分段。它发生在std::string库代码中,所以我假设我的程序正在其他地方重写该std::string代码。当我试图将char*分配给自动变量中的std:string时,就会发生segfault

struct MyStruct
{
    std::string name;
    int winch_ndx;
    ...
};
void MyFunction(const char * nodeName)
{
    MyStruct dataL;
    dataL.name = nodeName;  <-- segfault
    ...
}

由于dataL是一个自动变量,代码的其他部分不可能覆盖它所占用的内存,所以我猜库代码本身被值0x6C2FD8覆盖(见下文)。令人困惑的是,Valgrind根本没有检测到原始的无效写入。我不知道如何将这个0x6C2FD8引入std::string代码中。任何见解都将不胜感激。

Valgrid输出和我的valgrind命令如下。

===17112===进程终止,信号11(SIGSEGV)默认动作

===17112===地址0x6C2FD8的映射区域权限不正确

===17112===在0x9B07D87:__exchange_and_add(原子性h:47)

===17112===通过0x9B07D87:__exchange_and_add_dispatch(原子性h:80)

===17112===通过0x9B07D87:std::string::_Rep::_M_dispose(std::分配器常量&)[clone.part.12](basic_string.h:246)

===17112===通过0x9B07F78:_M_dispose(char_traits.h:243)

===17112===通过0x9B07F78:std::string::_M_mutate(无符号长、无符号长和无符号长)(basic_string.tcc:487)

==17112==by 0x9B083ED:std::string::_M_replace_safe(无符号长、无符号长,char const*、无符号短)(basic_string.tcc:684)

===17112===通过0x613ADA:MyFunction(comm.cpp:1108)

valgrind  --gen-suppressions=all --error-markers=BEGIN_MARK,END_MARK --free-fill=FF --malloc-fill=FF --trace-malloc=yes --trace-children=yes --track-origins=yes --read-var-info=yes --partial-loads-ok=no --log-file=vg2.out my_program 

检查nodeName是否为NULL,还检查nodeName实际指向以"\0"结尾的字符串。。。

相关内容

最新更新