
C++のダングリングポインタがよく分からないから教えてほしいんだけど。。
具体的なソースコードもあると嬉しいな。
こんな悩みを解決します。
- 本記事の内容
- ダングリングポインタとは?
- ダングリングポインタを使うとどうなる?
- ダングリングポインタの具体的なソースコード
- 本記事の執筆者


- 元エンジニア(歴7年)、資格保有数約20個(IT系以外も含む)
- 物販月利50万円⇒脱サラ
- 物販、システム開発、アフィリエイト、プログラミング、投資をやっています。
- 物販は彼女と楽しみながらやっています!
今回は、ダングリングポインタをAWS Cloud9で実行してみます。



すぐ読み終わるので、是非最後まで読んでみてください!
実行環境
今回は「AWS Cloud9」を利用します。



実行できる環境であれば何でもOKです!
ダングリングポインタとは?
ダングリングポインタとは、無効なメモリ領域を指すポインタのことです。
ポインタは本来メモリ領域(アドレス)を指すものですが、仮にこのメモリ領域が解放(破棄)されていた場合、存在しない領域を指すことになります。
ダングリングポインタを使うとどうなる?
ダングリングポインタを使うとどうなるかは分かりません。
コンパイラの解釈次第ですが、最近のコンパイラはダングリングポインタの恐れがある場合に警告を表示してくれます。
ダングリングポインタを使うとこうなる
ダングリングポインタを使った場合、以下のような事象が発生します。
- プログラムがクラッシュする
- 正常な振舞いをしているが、実際はデータを破棄しながら暴走する
- DB破壊
ダングリングポインタ実装例
#include <iostream>
int *dangling_pointer() {
int dp = 100;
return &dp;
}
int main() {
int *dp = dangling_pointer();
*dp = 100;
}
ダングリングポインタの実装例です。
解説
#include <iostream>
int *dangling_pointer() {
int dp = 100;
return &dp;
}
int main() {
int *dp = dangling_pointer();
*dp = 100;
}
dangling_pointer関数でアドレスを返却していますが、このアドレスはdangling_pointer関数終了時に破棄されます。
#include <iostream>
int *dangling_pointer() {
int dp = 100;
return &dp;
}
int main() {
int *dp = dangling_pointer();
*dp = 100;
}
存在しないアドレスを変数に格納しています。
#include <iostream>
int *dangling_pointer() {
int dp = 100;
return &dp;
}
int main() {
int *dp = dangling_pointer();
*dp = 100;
}
ダングリングポインタに値を格納しています。
AWS Cloud9で実行してみる
Running /home/ec2-user/environment/lambda/dangling_pointer.cc
/home/ec2-user/environment/lambda/dangling_pointer.cc: In function ‘int* dangling_pointer()’:
/home/ec2-user/environment/lambda/dangling_pointer.cc:4:9: warning: address of local variable ‘dp’ returned [-Wreturn-local-addr]
int dp = 100;
^
Process exited with code: 0
警告が出ていますが、実行結果は「0」なので正常終了しています。



とりあえず「想定していない挙動をする」と理解しておけばOKです!
まとめ
今回は、ダングリングポインタをAWS Cloud9で実行してみました。
実際に実装してみると色々と発見がありますね。
ではまた!
- ダングリングポインタとは、無効なメモリ領域を指すポインタのこと。
- ダングリングポインタを使用すると予期せぬ挙動をする。
- 最近のコンパイラは、ダングリングポインタを使用すると警告を出してくれる場合がある。
- おススメ本はこちら!



僕は↑の本でC++の勉強をしました!
非常に分かりやすいので是非!
- 関連記事




- 自由な生き方がしたいなら!
自由な生き方をするためには、稼ぐスキルを身に付けなければなりません。
当サイト「リバトレ」では稼ぐスキルに関する情報を日々発信しているので、興味のあるものから見て頂ければ嬉しいです。
コメント