某SNSで以下のrandomIntのような記述を見かけたのですが,この関数の意図が全く分かりません.ネタとして投稿したものなのかもしれませんが,以下のコードを実行したら0が表示されました.
また,main文の中にint& b = a
を追記したら,大体32500~32800が実行されるたびにランダムで表示されるようになりました.
もう全く理解できないです.
ramdomIntの意図と,参照することで値が変わる理由は何なのでしょうか?
これが分からないと困るわけではないですが,もやもやするので教えていただけるとありがたいです.
#include<stdio.h> int randomInt() { int n; return n; } int main() { int a; a = randomInt(); printf("a = %d\n", a); }
int& b = aを追記したら
はどこに追記したのでしょうか?
何カ所かに入れてみたのですが再現しません。
下記のようにしたらなりました.
a = randomInt();の下に書いても同じ結果になりました.
int main() {
int a;
int& b = a;
a = randomInt();
printf("a = %d\n", a);
}
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
では再現しませんでした。常に0が印字されます。
使っているコンパイラを教えてください。
たいていのC++処理系の動作原理から考えると、このような変数宣言を行ってた場合には、randomIntの値は変わらないはずですので不思議ですね。
wsl ubuntu18.04のg++7.5です
ASLRの有無とかですかね?
ググってみた所、元SNS?っぽいところでもASLR有効な場合と書いてありました。
面白いアイデアですね。(使ってはいけないけどw)
いくつか回答ついてるので、それに対するコメントくらいはしたらどうですか?放置はNGです。
解決したならベストアンサーを選択し、解決に至っていないならその理由を追記してください。
返信が遅れました.申し訳ないです.
正直参照についてはあまり納得がいってないのですが,randomIntの挙動についてはおかげさまで理解しました.
皆さんご回答ありがとうございました.
回答3件
あなたの回答
tips
プレビュー