とある本にこんな記述がありました。
『例えばnewで確保してそのアドレスをpというポインタに入れておくとします。そしてこのpを別の変数に保存したりdeleteしたりしないままpの値を変えてしまうと、もうそのアドレスを保持しているポインタが1つも無くなってしまいます。こうなると、もうこのメモリは自分で解放することが二度とできなくなってしまいます。』
『deleteしたりしないままpの値を変えてしまうと』というのはポインタ変数がはアドレスを変更できるため、元のメモリ部分がdeleteできなくなってしまうのはわかるのですが、
『pを別の変数に保存したり』という部分がわかりません。
教えてください。よろしくお願いします
p = アドレス;
p = 別のアドレス;
この二行で最初のアドレスが何だったかわからなくなるという意味です。
ただの日本語の読解問題なので、意味がわからないときは、意味がわからない文の前後も含めて読み直してみましょう。
次のように別の変数に保存すれば大丈夫です。
p = アドレス;
q = p;
p = 別のアドレス;
ああ、「保存したことが原因で消え失せる」と読む人がいる時代ですか。「保存」という日本語の意味が通じなくなっているというのは少しカルチャーショックですが、保存というのは無くさないためにする行動のことです。
例えば「おかずを少し保存しておく」というのは、食べたり捨てたりせず、後から食べられるようとっておく意味になります。
そもそも「メモリを確保する」とはどういうことか、あるいはもっと戻って「ポインタって何」ということについての理解は自信がありますか? なんかその辺があやふやなのでこの質問になっている気がするのですが。
> このpを別の変数に保存したりdeleteしたりしないままpの値を変えてしまうと、もうそのアドレスを保持しているポインタが1つも無くなってしまいます。こうなると、もうこのメモリは自分で解放することが二度とできなくなってしまいます
まぁ,やや文章がおかしいとは思う.
要は,
(deleteする前に)pの値(アドレス)を何かしら別の変数に値を保存することもなしにpの値を変えてしまうならば,元のpの値(アドレス)を保持する変数がなくなってしまうのだから,deleteできなくなる.
…ということを言いたいのでしょう.
「このpを別の変数に保存したり」を疑問に思うということは、
「このpを別の変数に保存したりdeleteしたりしないままpの値を変えてしまう」を
このpを別の変数に保存する(保存してpの値を変えてしまう)
このpをdeleteしないままpの値を変えてしまう
ととらえていませんか?
このpを別の変数に保存しないままpの値を変えてしまう
このpをdeleteしないままpの値を変えてしまう
なら疑問はなくなりますか?
皆さんありがとうございます。funaさん、tmpさんで気がつきました。その通りです。
thkanaさん、もう少し知識があれば気がつけたかもしれませんね
日本語の知識が必要ですね。
プログラミングほとんど関係ないただの日本語の読み書きの問題なので。
> そしてこのpを別の変数に保存したりdeleteしたりしないままpの値を変えてしまうと、
保存と delete の直後にどちらも「したり」とついていますよね?
これで保存と delete が同格に書かれていることがわかり、「しない」が両者にかかっていることがわかります。
delete の後の「したり」が無かった場合は曖昧な表現になりますが、この表現であれば誤解の余地はありません。
「保存」の意味を知っていればなおさら迷うことはないでしょう。
回答3件
あなたの回答
tips
プレビュー