[解決済み] セグメンテーションフォールトとは何ですか?
2022-03-24 13:50:22
質問
セグメンテーションフォールトとは何ですか?CとC++では違うのですか?セグメンテーションフォールトとダングリングポインターはどのように関係していますか?
解決方法は?
Segmentation faultは、"自分のものではない "メモリにアクセスすることで発生する、特定の種類のエラーです。これは、メモリを破損したり、デバッグが困難なメモリバグを発生させないようにするための補助的なメカニズムです。セグメンテーションフォールトが発生するときはいつも、すでに解放された変数へのアクセス、メモリの読み取り専用部分への書き込みなど、メモリに対して何か間違った操作をしていることがわかります。セグメンテーションフォールトは、メモリ管理をいじることができるほとんどの言語で本質的に同じであり、CとC++のセグメンテーションフォールトの間に主要な違いはないのです。
少なくともC(++)などの低レベルの言語では、セグメンテーションフォールトを起こす方法はたくさんあります。セグメンテーションフォールトを起こす一般的な方法は、ヌルポインタをデリファレンスすることです。
int *p = NULL;
*p = 1;
また、読み取り専用とされたメモリの一部に書き込もうとすると、別のセグメンテーションフォールトが発生します。
char *str = "Foo"; // Compiler marks the constant string as read-only
*str = 'b'; // Which means this is illegal and results in a segfault
ダングリングポインターは、このように、もう存在しないものを指しています。
char *p = NULL;
{
char c;
p = &c;
}
// Now p is dangling
ポインター
p
を指しているため、ダングリングしています。
c
がブロックの終了後に存在しなくなった。そしてダングリングポインタをデリファレンスしようとすると (
*p='A'
を使用すると、おそらくセグメンテーションフォールトが発生します。
関連
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] Segmentation fault (core dumped)とは何ですか?重複