2017-04-13 17 views
-1

とSolarisプラットフォームではありませんガベージ値(Ubuntuは64ビットメイト)単純なコード

# include <stdio.h> 

int main() 
{ 
    int i,j,l=0,swap,n,k,a[100],b[100],count; 

    printf("%d", count); 
} 

予想したように、これはゴミ値を返す必要があり、それはまさにそれをやっていました。 私はまたそれを数回走った。私は毎回異なる結果を得ていました。これは毎回新しいメモリが割り当てられたことを示しています。出力はこのようなものでした。

32576 
33186 
0 
29318 
0 
32111 
0 

しかし、いくつかの事例のために、私は今、この同じコードはSolarisサーバで実行されたゼロ

を得ていたという通知。このソラリスサーバーに接続されたシンクライアントマシンで実行しました。しかし今回は、プログラムを何回実行したとしても、プログラムは0しか印刷しませんでした。別のアカウントからサーバーにログインしても、同じ結果が得られました。 私はsolarisマシンにある種の継承ガベージコレクタがあると思っていましたが、そうではありませんでした。私は別のプログラムを実行したとき、私はゴミ値を取得していました。

# include <stdio.h> 

int main() 
{ 
    int i; 

    printf("%d", i); 
} 

私の質問は、それは2つのプラットフォーム間で若干の違いがあるか、それは私がランダムのちょうど犠牲者だということですか?

+0

ガベージコレクションタグはオフトピックです。 GCについての詳細はhttp://gchandbook.org/をご覧ください –

答えて

1

2つのプラットフォームの多くの違いがあります。もちろん

の間にいくつかの違いがあります。コンパイルされた実行ファイルを別のコンパイルファイルで実行することはできません。そして、両方のプラットフォームで動作している場合でもそうです。 Linux on x86とSolaris on SPARCハードウェアを使用している場合、その違いはさらに大きくなります。

初期化されていない変数の読み込みは、とにかく未定義の動作です。 (Why) is using an uninitialized variable undefined behavior?