0

データを格納するためにRTreeを使用して、C++を使用したSkylineクエリに基づくアルゴリズムを開発しています。最大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 に答える