0

我正在使用 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())

任何人都可以帮助我了解错误在哪里或 ar

4

2 回答 2

2

Mitch Wheat 已经在评论中提出了这个建议,但我认为这实际上是解决您问题的最佳答案,所以:

使用 valgrind。

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

从字面上看,您需要做的就是构建您的程序,最好使用-g使其更易于调试的选项,然后像valgrind my-prog args.... 然后,当发生不良情况时,Valgrind 将打印出带有堆栈跟踪的详细错误报告。您的问题可能会在不需要使用常规调试器的情况下被发现,我们也不需要猜测问题(如果这是我自己的问题,我也会使用 valgrind)。

于 2013-03-07T04:03:36.843 回答
1

鉴于此,我最好的猜测是您正在尝试使用无效的源数据创建一个字符串,可能是一个未初始化的 char 指针或指向一个已被释放的字符串

于 2013-03-07T04:09:29.647 回答