Dav*_*yan 12 c++ linux debugging valgrind
我有一个std :: map <std :: string,std :: string>,它通过一些API调用初始化.当我试图使用这张地图时,我遇到了分段错误.如何检测无效代码或无效代码或任何可以帮助我解决问题的细节?代码如下所示:
std::map< std::string, std::string> cont;
some_func( cont ); // getting parameter by reference and initialize it, someone corrupted memory (cont) inside this function
std::cout << cont[ "some_key" ] << '\n'; // segmentation fault here, cannot access "some_key"
Run Code Online (Sandbox Code Playgroud)
一般来说,我不确定该行如何生成段错误:括号运算符将始终返回 std::string (如果需要,创建一个空字符串)并且它应该始终对打印有效。
有没有可能,您看到的调用堆栈指向下一行要执行的内容,并且它在 some_func 中消失了?我们没有看到它的代码,所以我不能说它是否会导致问题。
或者some_func
使用 char* (调用临时 std::string)来初始化映射中的字符串?它可能会在映射中引入一个无效的字符串,该字符串“碰巧工作”了一段时间,但当 some_func 返回时,它无法与打印很好地交互。