C++: Segmentation fault (core dumped)
C++で不正なメモリアクセスが発生した場合のエラー
概要
C++プログラムが許可されていないメモリ領域にアクセスしようとした場合に発生するエラーです。
エラーメッセージ
Segmentation fault (core dumped)
または
Signal: SIGSEGV (Segmentation fault)
原因
- NULLポインタの参照: 初期化されていないポインタの使用
- 解放済みメモリへのアクセス: deleteした後のポインタ使用
- 配列の範囲外アクセス: インデックスが配列サイズを超えている
- スタックオーバーフロー: 再帰が深すぎる、または大きなローカル変数
解決策
1. ポインタの初期化を確認
| |
2. 配列の範囲チェック
| |
3. スマートポインタを使用
| |
4. デバッガで調査
| |
5. AddressSanitizer を使用
| |
6. valgrind で検出
| |
7. 再帰の深さを確認
| |
よくある間違い
- deleteした後のポインタをnullptrに設定していない
- std::vectorの[]演算子で範囲チェックなしにアクセス
- C文字列のnull終端を忘れている
- マルチスレッドでの競合状態
C++ の他のエラー
この記事は役に立ちましたか?