【C++】ダングリングポインタをAWS Cloud9で実行してみた!

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

ダングリングポインタは無効なメモリ領域を指すポインタのことです。

今回はC++のサンプルコード付きで解説しますね。

本記事を読めば、C++のダングリングポインタが理解できるので早速見ていきましょう!

いずみ

サクッと読み終わるので、ぜひ最後まで読んでくださいね♪

執筆者/監修者
  • フリーランスエンジニア(保有資格個)
  • ブログ・アフィリエイト歴5年
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資歴5年(仮想通貨・FXが得意)
  • Twitterフォロワー約2,000人
  • 運営者情報はこちら
いずみです
目次

【前提】実行環境

今回は「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です!

よくある質問

ダングリングポインタとは何ですか?

無効なメモリ領域を指すポインタのことです。

ダングリングポインタを使うとどうなりますか?

予期せぬエラーが発生します。

まとめ

今回は、C++のダングリングポインタについて解説しました。

以下が本記事のまとめになります。

まとめ
  • ダングリングポインタとは、無効なメモリ領域を指すポインタのこと。
  • ダングリングポインタを使用すると予期せぬ挙動をする。
  • 最近のコンパイラはダングリングポインタを使用すると警告を出してくれる場合がある。
まとめ♪
  • おすすめ本
¥3,718 (2023/07/23 14:32時点 | Amazon調べ)

C++の勉強なら「」が分かりやすくておすすめですよ♪

いずみ

最後までお読みいただき、ありがとうございました!

  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次