質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

267閲覧

関数の戻り値が異なる

meiguma

総合スコア13

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/01/29 04:08

編集2019/01/29 04:31

前提・実現したいこと

もともとWindows7 開発環境はVisualStudio VC6.0を使用しています。
下記の実装して実行をすると、Windows7の環境では、毎回100が表示されますが、
Windows10に環境を移したところ、毎回結果が異なり不定(100or0)となります。
単純にWindows7ではたまたまメモリの状況が固定となっていただけで、
不定になるのが正解でしょうか??

発生している問題・エラーメッセージ

関数の戻り値が異なる (よくわからなくなったので教えてください。)

該当のソースコード

class Hoge{ public: Hoge( doube rX ) :m_rX( rX ){}; private: double m_rX; public: double GetX( void ) { return m_rX ; } void SetX( double rX ) { m_rX = rX ; } } main{ Hoge* pHoge = new Hoge( 0. ) ; Hoge& hoge = *pHoge ; delete pHoge ; pHoge = new Hoge( 100. ); CString strHoge ; strHoge.Format( "%f", hoge.GetX() ) ; MessageBox( strHoge ); delete pHoge; }

試したこと

Windows7 Windows10いずれでビルドしても同じ
VisualStudioのバージョンをかえても同じ

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

不定になるのが正解です

deleteを使って、hogeの中身は消滅しています
これはpHogeに再度newしたからといっても復活するわけではありません

・pHogeが部屋を申請→101の部屋が割り当てられる
・hogeにpHoge(101)の部屋を伝える
・pHogeは101の部屋を退去

・pHogeが再度部屋を申請→(ここで、101か102のどちらを割り当ててもよいし、システムによる)
・hogeは101の状態を報告

C++の仕様では、こんな解放済みメモリを参照する行為は未定義動作と言って、
何が起こっても良い、という動作になっています

今回はたまたまメモリ不定で終わっていますが、
システムがまるごと落ちても仕様どおりなので絶対にしないようにしましょう

投稿2019/01/29 04:26

編集2019/01/29 04:27
izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問