セグメンテーションフォールト(Core Dump)問題
最近、プロジェクトで作業しているとき、cでコンパイルされたダイナミックリンクライブラリをpythonで呼び出すと、次のような結果になりました。 セグメンテーションフォールト(コアダンプ) の問題が発生しました。
情報を検索した結果、原因は空間のセグメンテーションエラーによるものであることが判明しました。原因としては、以下のようにいくつか考えられます。
このエラー(実際にはアクセスすべきでないメモリ上の何かにアクセスしている)の原因として考えられること。
1.メモリアクセスが範囲外である。
(1) 配列のアクセスは、添え字が範囲外であるため、範囲外となります。
(2) 文字列を検索するとき、文字列の終端記号で終端を決定するが、そのような終端はない。
(3) strcpy, strcat, sprintf, strcmp,strcasecmp などの文字列操作関数を使用すると、文字で定義された格納可能な最大範囲を超えてしまいます。strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp などの関数を使用して、範囲外の読み書きをしないようにしてください。
2. マルチスレッドプログラムでは、スレッドセーフでない関数を使用する。
3、マルチスレッドは、ロックで保護されていないデータを読み書きします。
複数のスレッドから同時にアクセスされるグローバルデータについては、ロック保護を付加するなどの配慮が必要で、そうしないとコアダンプが発生しやすくなります
4. 不正なポインタ
(1) NULLポインタの使用
(2) ポインタの型を任意に強制変換する。このような強制変換は、実はとても危険です。変換する型であることを確認しない場合、簡単にエラーになります。強制変換した型が強制変換した型としてアクセスされるので、アクセスしてはいけないメモリにアクセスすることが可能だからです。
5. スタックオーバーフロー
大きなローカル変数は使わないでください(ローカル変数はスタック上に確保されるため)。スタックオーバーフローを起こしやすく、システムのスタックやヒープ構造が壊れて、不可解なエラーにつながる可能性があります。
私がここで抱えている問題の現象を分析するステップ。
(1)年齢検出は問題ないが、性別検出ができない。
(2)両モデルとも同じで、コードも基本的に同じなので、2つの部分を比較してみました。発見:年齢検出のインクルードのncnnヘッダーファイルは、ジェンダーと同じではありません。
(3)発見。性別判定に含まれるncnnヘッダファイルは古いバージョンですが、ncnnスタティックライブラリは最新のものです。このため、ヘッダーファイルで定義されている構造体がライブラリと不整合になり、メモリ読み出しに問題が発生します。
(4) 解決策 性別判定に含まれるncnnヘッダーファイルを年齢判定と一致するように変更し、問題解決。
関連
-
[解決済み】「無効なイニシャライザー」と表示されるのですが、何が間違っているのでしょうか?
-
[解決済み] error: struct has no member named X
-
[解決済み] 整数の割り算の動作はどうなっていますか?
-
[解決済み] C言語の'glibc detected'がわからない
-
[解決済み] C: リンカーコマンドが失敗し、終了コード 1 が表示されました。
-
[解決済み] OpenGLにおけるマトリックススタックのポイントは?
-
[解決済み] エラー free(): 次のサイズが無効です (高速)
-
[解決済み] POSIXソケットをフラッシュする方法はありますか?
-
[解決済み] 解放されるポインタが割り当てられていなかった」とは、具体的にはどういう意味ですか?
-
[解決済み] 引数を渡すと、キャストせずに整数からポインタを作成します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[C] レポートエラー 代入の左オペランドに lvalue が必要です。
-
[解決済み】OpenGL--GL_LINE_LOOP--。
-
[解決済み] Linux ターミナル - エラー: 複合文の末尾にラベルがあります。
-
[解決済み] リンク時のグローバル変数への未定義参照
-
[解決済み] Cコンパイルエラーです。"変数サイズオブジェクトが初期化されていない可能性があります"
-
[解決済み] 32ビット数値のバイトを置き換える
-
[解決済み] 修正方法 - コントロールが非ボイド関数の終わりに達する可能性があります。
-
[解決済み] uid_t 型は符号付きか符号なしか?