std :: string函数中的C ++分段错误

时间:2013-03-07 03:47:26

标签: c++ string gdb segmentation-fault allocator

我正在使用C ++开发基于Skyline查询的算法,使用RTree存储我的数据。如果我处理多达5个点,该算法工作正常,如果我尝试6个点,则会产生分段错误。 使用gdb我发现问题在于:

Program received signal SIGSEGV, Segmentation fault.
std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string (
    this=0x7fffffffd7c0, __str=
    <error reading variable: Cannot access memory at address 0xffffffffffffffe8>)
    at /usr/src/debug/gcc-4.7.2-20120921/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/bits/basic_string.tcc:175
175           __str.get_allocator())

任何人都可以帮我理解错误的位置或者

2 个答案:

答案 0 :(得分:1)

Mitch Wheat已经在评论中提出这一点,但我认为这实际上是你问题的最佳答案,所以:

使用valgrind。

Valgrind是一个工具(或者说是一组工具),默认操作模式是运行程序并检查内存错误,例如泄漏,缓冲区溢出,未初始化的读取等等。

您需要做的就是构建程序,最好使用-g选项以使其更容易调试,然后像valgrind my-prog args...一样运行它。然后Valgrind会在出现问题时打印出带有堆栈跟踪的详细错误报告。你可以在不需要使用常规调试器的情况下找到你的问题,也不用猜测问题(如果这是我自己的问题,我也会使用valgrind)。

答案 1 :(得分:1)

只考虑到这一点,我最好的猜测是你试图使用无效的源数据创建一个字符串,可能是一个已经被整理的字符串指针或者指向已经被释放的字符串