1

私はUbuntuを使用しています。g++ バージョン 4.7.2。

gnu-extension の単一リストを手伝ってくれる人はいますか? ここにあるものをコンパイルし、実行するとコアダンプを取得しました。

デバッグしたところ、最初の行でコア ダンプが発生し、解決できないエラーがスローされました。誰か私にそれを手伝ってもらえますか??

エラーコード:

std::allocator<char>::allocator (this=0x7fffffffe4d0)
at /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h:104
104 /build/buildd/gcc-4.7-4.7.2/build/x86_64-linux-gnu/libstdc++-v3/include/bits/allocator.h: No such file or directory.

これは私のテストコードです:

#include <ext/slist>
#include <cstring>
#include <iostream>

int main(int argc, char * argv[])
{
    __gnu_cxx::slist<char> li(&argv[1][0], &(argv[1][strlen(argv[1])]));

    if(argc != 3)
        return 1;

    std::cout << "SList: ";
    for(__gnu_cxx::slist<char>::iterator i = li.begin();
            i != li.end();
            ++i)
        std::cout << *i;
    std::cout << std::endl;

    li.remove(argv[2][0]);

    for(__gnu_cxx::slist<char>::iterator i = li.begin();
            i != li.end();
            ++i)
        std::cout << *i;
    std::cout << std::endl;

    return 0;
}//main
4

1 に答える 1

2

私の推測では、実行時にコマンドライン引数を指定していないということです。リストに入れる文字シーケンスと、削除する文字シーケンスの 2 つが必要です。

更新: コメントで述べたように、をgdb使用するときにプログラムに引数を渡すには、オプションを使用して--args、プログラム名に続く引数をプログラムgdb自体ではなくプログラムに渡す必要があることを示す必要があります。

gdb --args a.out xxyyxx x
    ^^^^^^

その引数が存在することを確認するargv[1] 前に、最初の引数からリストを初期化します。そうでない場合は、未定義の動作が発生します。チェックを の宣言の上に移動すると、その場合li、プログラムは代わりに戻りコード 1 で終了する必要があります。

次に、デバッガーは、ソース ファイルが見つからないことを報告し、どのソース行で問題が発生したかを表示できません。

ところで、C++ 標準ライブラリには、GNU の拡張機能の代わりに使用できるstd::forward_listで定義された単一リンク リスト が含まれるようになりました。<forward_list>

于 2012-12-12T13:53:52.480 に答える