新プログラミング言語『Zero』を開発しました! 本サイトの記事数は「589」!!

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

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

 

ポインタには「ダングリングポインタ」というものがあります。

現在、C++絶賛勉強中なので、試しにサンプルを書いてみました。

ってことで今回は、ダングリングポインタをAWS Cloud9で実行してみまする

 

僕のプロフィールはこちら

 

 

今回のソースコード

■GitHub

URL:「https://github.com/izumin0401/cc/blob/master/dangling_pointer.cc」

 

 

実行環境

最近僕は「AWS Cloud9」を使っています。

というのも、ローカルPCに環境を作るのとか今時あほくさくてやってられないからです。

■サポート言語

URL:「https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/language-support.html」

 

 

ダングリングポインタって?

ざっくり言うと、「無効なメモリ領域を指すポインタ」のことです。

ポインタはメモリ領域(アドレス)を指すものですが、仮にこのメモリ領域が解放(破棄)されていた場合、存在しない領域を指すことになります。

 

 

ダングリングポインタを使うとどうなる?

ダングリングポインタを使うとどうなるかは分かりません。

結局はコンパイラがどう解釈するかによるみたいですが、最近のコンパイラはダングリングポインタの恐れがある場合に警告を出してくれます

 

 

ダングリングポインタを使うとこうなる

まあ良くないことが起こるのは目に見えてますが、以下のような事象が発生します。

・プログラムがクラッシュする

・正常な振舞いをしているが、実際はデータを破棄しながら暴走する

・DB破壊

 

要約すると、訳分からん行動をとるのでダングリングポインタは使わないようにしようねってことです。

 

 

ダングリングポインタ実装例

すごいあっさりしたプログラムっすね。

 

解説

dangling_pointer」関数でアドレスを返却していますが、このアドレスは「dangling_pointer」関数終了時に破棄されます。

 

 

存在しないアドレスを変数に格納しています。

 

 

ダングリングポインタに値を格納しています。

 

 

Advertisement

 

AWS Cloud9で実行してみる

どうやら警告が出ていますね。

実行結果は「0」なので、正常終了はしているみたいです。

おわり!

 

 

おすすめ本

これおすすめやで。

 

 

 

まとめ

ダングリングポインタとか普段ポインタを触っていない人間からすると馴染みがないっすね。

にしても、C++って自由度高すぎませんかね?

自由度の高い言語って、やれることが多い反面、皆使いこなせないのでカオスになることが多いので嫌い。

さいなら。

Travelerを知らないの?