gpt4 book ai didi

c++ - Valgrind 找不到无效的写入

转载 作者:行者123 更新时间:2023-11-28 00:10:01 29 4
gpt4 key购买 nike

我的程序以一种非常令人费解的方式出现段错误。它发生在 std::string 库代码中,所以我假设我的程序正在覆盖其他地方的 std::string 代码。当我尝试将 char* 分配给 automatic 变量中的 std:string 时,会发生段错误:

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 (atomicity.h:47)

==17112== by 0x9B07D87: __exchange_and_add_dispatch (atomicity.h:80)

==17112== by 0x9B07D87: std::string::_Rep::_M_dispose(std::allocator const&) [clone .part.12] (basic_string.h:246)

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

==17112== by 0x9B07F78: std::string::_M_mutate(unsigned long, unsigned long, unsigned long) (basic_string.tcc:487)

==17112== by 0x9B083ED:std::string::_M_replace_safe(unsigned long, unsigned long, char const*, unsigned long) (basic_string.tcc:684)

==17112== by 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' 结尾的字符串 ...

关于c++ - Valgrind 找不到无效的写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33638607/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com