質問: GetMax(size1, size2, size3); //4が入る ``` これだと確かにコンパイルは通り、実行結果も上手く行きます。 しかし、**何故直接では駄目で一度変数に逃がす必要がある**のかわからないので、依然として納得できません。 ### 疑問 * まず何故このような結果になってしまうのか。 * Debugモード / Releaseモードで挙動が違う?検討が付きません。 * 補足コードのようにすると実行結果は上手くいくが、何故直接`GetLength()`からでは駄目なのか ### 補足情報 * Windows 7 Pro SP1 64bit * Visual Studio 2013( Version 12.0.40629.00 Update 5 ) * リンカー / 最適化オプションが以下の通りです | 項目 | Debug | Release | | --- | --- | --- | | 参照 | なし | はい(/OPT:REF) | | COMDATの圧縮 | なし | はい(/OPT:ICF) | 上記以外で必要な情報があれば追記します。 分かる方いらっしゃったら、回答の方よろしくお願いします。
回答: > > 引用テキスト以下が、原因箇所のミニマムなコードです。 > > > この手のバグは、「原因箇所のミニマムなコード」という絞り込みがそもそも間違いであるケースがあります。「正常な箇所で発現するが、バグの原因箇所は全く別の場所(患部では潜在するだけで正常な場所で顕在化するケース)」ということもありますので注意ください。