問題タブ [segmentation-fault]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - segfault命令ポインタアドレスを/var/ log / messagesから.mapファイルのアドレス/関数にマップするにはどうすればよいですか?
(私の環境は64ビットUbuntuで、私のアプリケーションはC ++でコンパイルされ、g ++でリンクされています。)
アプリケーションがゼロ除算のようなことをしたりasm("int $3")
、コードの左を実行したりすると、次のいずれかがsyslogを介して次のようにログに記録され/var/log/kern.log
ます/var/log/messages
。
.map
どちらの場合も、命令ポインタアドレスは、リンク時に作成されたファイルで簡単に検索できるものを指します( " -Wl,-Map,output.map
"を使用)。
しかし、セグメンテーション違反を引き起こした場合、この場合memcpy()
、ソースをNULLに設定してを呼び出すと、命令ポインターが範囲外になり、どのようにマップされるのかわかりません。
この例では、IPが0x445e70-0x445e7fの範囲にあると予想していました。これは、私の.mapファイルによるとmemcpy()の場所です。
私の質問:この場合のIPを解釈する秘訣は何ですか?
c++ - std :: string ::assign()はセグメンテーション違反を引き起こします
std::vector<uint8_t>
特定のオフセットに文字列を含むがあります。短縮されたダンプは次のとおりです。
std::string
オフセット136でデータを抽出し、それを:に入れようとしています。
ただし、これにより、アプリケーションがセグメンテーション違反になります。今、私はLinuxでのソフトウェア開発にかなり慣れていませんが、GDBでアプリを起動してバックトレースを取得する方法を知っており、ここで問題を追跡しました。
印刷vec.size()
すると200が返され、ベクトルをループしてデータを印刷しても問題は発生しません(クラッシュするスニペットの真上にあります!)。
私はg++4.3.4を使用してDebianでコンパイルしています。この問題が何である可能性があるかについてのポインタはありますか?
c - malloc() はどのように SIGSEGV を引き起こしますか?
プログラムに奇妙なバグがあります。malloc() が SIGSEGV を引き起こしているように見えますが、私の理解では意味がありません。動的リストには simclist というライブラリを使用しています。
後で参照する構造体を次に示します。
コードは次のとおりです。
list_init
プログラムが失敗する場所です。list_init のコードは次のとおりです。
行l->spareels = (struct list_entry_s **)malloc(SIMCLIST_MAX_SPARE_ELEMS *
は、スタック トレースによると、SIGSEGV が発生する場所です。デバッグに gdb/nemiver を使用していますが、途方に暮れています。この関数が最初に呼び出されたときは正常に機能しますが、2 回目は常に失敗します。malloc() はどのように SIGSEGV を引き起こしますか?
これはスタック トレースです。
どんな助けや洞察も大歓迎です!
c - セグメンテーション違反を引き起こす fclose()
解析中のタブ区切りのテキスト ファイルがあります。その最初の列には、「1」、「2」、...、「X」、「Y」などの一連の文字列を示す形式chrX
の文字列が含まれます。X
ファイルが解析されると、これらはそれぞれchar*
呼び出された に格納されます。chromosome
テキスト ファイルは、最初の列で辞書式に並べ替えられます。つまり、"chr1" で始まり、次に "chr2" などの行がいくつかあります。
「chrX」エントリごとに、このエントリに関連付けられている別のファイルを開く必要があります。
openSourceFile
次のように定義された関数があります。
問題は、次の行で最初の染色体から 2 番目の染色体 ( からchr1
までchr2
) に移動するセグメンテーション フォールトでアプリケーションが終了し、最初に開いた染色体ファイルを閉じることです。
fclose
セグメンテーション違反が発生するまで、このファイルからデータを読み取っているため、NULL ポインターを渡していないことはわかっています。これを条件付きでラップすることもできますが、それでもフォールトが発生します。
さらに、アプリケーションが行を解析し、ソース ファイルからデータを正しく読み取るため、 openSourceFile
(少なくともchr1
の の最初のファイル ハンドルを設定するときに) が機能することがわかっています。FILE*
chr1
FILE*
fclose
セグメンテーション違反が発生する原因となっているこの呼び出しの原因は何ですか?
c++ - リストを使用するこの C++ コードでセグメンテーション違反が発生する理由は何ですか?
push_back
私は複雑な C++ コードをいくつか持っていますが、問題は構造のリストで実行することに絞り込まれます。
のすべてのデータ メンバーにコメントを付けましたがstruct cache_page
、それでもエラーは解決しません。行をコメントしてpush_back
もエラーはありません。
その理由は何ですか?
GDBを使用してみましたが、関数でエラーが発生し_List_Node_base::hook()
ます。
私は何もしないコピーコンストラクターを持っています。cache_page にデータ メンバーがありません。
debugging - セグメンテーション違反のリップ/rsp番号とは何ですか?それらの使用方法
Linuxアプリケーションがクラッシュすると、ログに次のような行が生成されます。
0000000でのセグメンテーション違反rip00003f32a823rsp000123ade323エラー4
それらのripおよびrspアドレスは何ですか?それらを使用して問題を特定するにはどうすればよいですか?それらは「objdump」または「readelf」出力の何かに対応していますか?私のプログラムがそのシンボルを(gdbを使用して使用できる別のファイルに)削除する場合に役立ちますか?
java - JNI セグメンテーション違反バグ
ocamorph という名前のこの形態素アナライザー (オープン ソース、OCml で記述) があります。こちらからダウンロードして手順を作成してください
Javaバインディングにはバグがあり、修正する必要があります。数時間の闘争の後、C、JNI、OCml、およびこれに精通していないため、修正に数日かかるようです。ソフトウェア。
ここでは、小さなファイル (subtitles_136.hu.tok) では機能しますが、大きなファイル (Tolkien_1.hu.tok) では「セグメンテーション エラー」がスローされることがわかります。
これは Java バインディングの C 部分です (/ocamorph/src/bindings/java/src/c/hunmorph_jnistub.c)。これはバグのある部分かもしれません。バグを見つけるためのヒントや助けに感謝します:
Java 部分 (/ocamorph/src/bindings/java/src/java/mokk/nlp/ocamorph/OcamorphWrapper.java) は次のとおりです。
c++ - デバッガーのクラッシュを待っていますか?
アサートが失敗した場合、またはセグメンテーション違反が発生した場合、次のいずれかが発生すると非常に便利です。
- プログラムは、デバッガーを実行するかどうかを尋ねます。
- デバッガーが接続されるまで、プログラムはクラッシュして待機します。
- プログラムは、この時点から実行を再開して調査できる何か (コア ダンプ?) を残します。
さまざまなプラットフォーム、言語、デバッガーがあるため、質問は非常に一般的です。C++ について質問していますが、Windows (VS)、Linux (gdb)、Mac (gdb?) のソリューションがコミュニティにとって最も役立つと思います。Linux + gdb に興味があります。
c - Cでのポインタの初期化と文字列の操作
- main()から約1000回呼び出されるこの関数があります。この関数でmalloc()を使用してポインターを初期化すると、セグメンテーション違反が発生します。これは、関数を終了する前にポインターをfree()しなかったことが原因である可能性があります。ここで、mainに戻る前にポインタをfree()しようとしましたが、役に立たず、最終的にセグメンテーション違反が発生します。
- 上記のシナリオは1つですが、ダブルポインター(** ptr)とポインターの配列へのポインター(* ptr [])を初期化するにはどうすればよいですか?
- 文字列(char配列)をcharポインタの配列にコピーする方法はありますか?char arr []; (そのような配列が50個あるとしましょう)char * ptr_arr [50]; ここで、そのような各chararr[]を*ptr_arr[]にポイントします。ここでchar*ptr_arr []を初期化するにはどうすればよいですか?
- Cの初期化されていないポインタの影響は何ですか?
- strcpy()はそれ自体で「\ 0」を追加しますか、それとも手動で追加する必要がありますか?strncpy()と比較してstrcpy()はどのくらい安全ですか?strcat()やstrncat()と同じように。
ありがとう。
c++ - 優先キューへの挿入中のセグメンテーション違反
優先キューの私の定義は次のとおりです。
私がやっている:
3 ~ 4 個のノードに入ると、セグメンテーション エラーが発生します。
mynode
は空ではありません。
どうすれば解決できますか?