我有一个 std::map ,它通过一些 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"
您使用以下语法启动应用程序(在调试模式下编译):
valgrind yourapp
Valgrind 将向您显示发生分段错误的堆栈回溯。之后,您就需要找出发生的情况并进行纠正。
在你的代码中,无论 valgrind 如何,我都会检查返回的内容cont[ "some_key" ]
段错误最可能的原因是返回的值是一些野指针或根本没有初始化。如果是这样,请尝试访问它cont["some_key"][0]
也会导致分段错误。
另一个想法:地图中的字符串键怎么样?是否有可能其中一些默默地(也不例外)未能分配用作密钥的字符串的数据部分。 std::map 不是哈希表,而只是一些有序的容器。当搜索一个密钥时,它可能需要访问其他密钥,并且那里可能会发生糟糕的事情。要检查您是否可以尝试迭代地图中的所有键并显示内容(以查看“some_key”是否特别出现问题,或者您是否无法访问地图中的任何内容)。
如果您的程序不需要排序来查看行为是否相同,您也可以尝试使用 unordered_map。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)