[解決済み] ダングリングポインタとメモリリークの違い
2023-06-14 06:30:02
質問
ダングリングポインタとメモリリークの違いがよくわかりません。この 2 つの用語はどのように関連しているのですか?
どのように解決するのですか?
A ダングリングポインタ は既に解放されたメモリを指しています。そのストレージはもう割り当てられていません。アクセスしようとすると、Segmentation faultが発生する可能性があります。
ダングリングポインタの一般的な終わり方。
char *func()
{
char str[10];
strcpy(str, "Hello!");
return str;
}
//returned pointer points to str which has gone out of scope.
ローカル変数であったアドレスを返しているので、呼び出し元の関数に制御が戻されるまでにスコープ外に出てしまったのでしょう。 (未定義の動作)
もうひとつのよくあるダングリングポインタの例は、ポインタを使ったメモリ位置へのアクセスで、freeが終了した後に 明示的に が呼び出された後に、ポインタを介してメモリにアクセスすることです。
int *c = malloc(sizeof(int));
free(c);
*c = 3; //writing to freed location!
A メモリリーク とは、解放されていないメモリで、今はもうアクセスする方法がない(解放する方法がない)ものです。(例: ポインタが であった であったポインタは、あるメモリ位置への唯一の参照である 動的に割り当てられた (そして解放されていない)今どこか他の場所を指しています)。
void func(){
char *ch = malloc(10);
}
//ch not valid outside, no way to access malloc-ed memory
Char-ptr ch はローカル変数で、関数の最後でスコープ外になり、動的に確保された 10バイト .
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] セグメンテーションフォールトとは何ですか?
-
[解決済み] スタティック・ライブラリとシェアード・ライブラリの違い?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] floatとdoubleの違いは何ですか?
-
[解決済み] ストラクチャーとユニオンの違い
-
[解決済み] 講師が書いた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 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
C 言語のポインタ配列のポインタ型、ポインタに値を割り当てるために配列名を使用、コンパイル時の警告:互換性のないポインタ型からの初期化
-
コンパイルエラー:可変長オブジェクトが初期化されていない可能性があります。
-
[解決済み] C言語の書式指定子 %ul と %lu の違いは何ですか?
-
[解決済み] C 言語で const char* を char* に変換するには?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
-
[解決済み】Visual Studio C++で、メモリ割り当ての表現とは何ですか?