瓦尔格林德找不到无效的写入
Valgrind can't find invalid write
我的程序正在以一种非常令人费解的方式分段。它发生在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"结尾的字符串。。。
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- 我收到错误"变量类型不完整"无效,我找不到问题所在
- 错误:控制到达非无效功能的末尾.找不到修复错误的位置
- 瓦尔格林德找不到无效的写入
- 找不到错误 读取大小 4 瓦尔格林德无效