掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
式の評価順序、奇妙な振る舞い (ID:71598)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
タイトルが分かりにくくてすみません。以下のページであるコードが議論されています。 http://forums.topcoder.com/?module=Thread&threadID=673205&start=0&mc=13 そのコードは次のようになっています。一部コメントを加えました。 #include <cstdio> #include <iostream> #include <vector> using namespace std; struct XYZ { int X,Y,Z; }; vector<XYZ> A; int rec(int idx){ int i = A.size(); A.push_back(XYZ()); if (idx >= 1000) return i; A[i].X = rec(idx+1); /* 以下のように書き換えると、実行結果は正しくなる int x = rec(idx+1); A[i].X = x; */ return i; } int main(){ A.clear(); rec(0); printf("A :"); for (int i=0; i<5 && i<(int)A.size(); i++) printf(" %d",A[i].X); puts(""); fflush(stdout); } これを手元の環境(Windows7)で実行してみると、 g++(MinGW)で実行するとクラッシュします。 Visual C++ 2010 Express の cl でコンパイルすると、実行結果は次のようになります。 A : 1 2 3 4 5 上のページを読むと(読み間違っているかも知れませんが)、評価順序に関係が あるようなのですが…。英語があまりうまく読めないこともあり、 上のページの内容が理解できずにいます。 なぜクラッシュするのでしょうか?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.