2017-11-15 11 views
1

「int value = ar [n]」のようなインデックスから配列のintを取得する場合、私は常に大きな整数を取得します。それは最大のサイズを表しています(私は思う)。Hackerrank Objective-c intポインターが正しくない値

入力(stdin)

4 
3 2 1 3 

コード:

int main(int argc, const char * argv[]) { 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int n; 
scanf("%i",&n); 
int ar[n]; 

int counter = 0; 
int tempValue; 

for(int ar_i = 0; ar_i < n; ar_i++){ 

    int value = ar[ar_i]; 

    if(tempValue < ar[ar_i]){ 

     counter = 1; 
     tempValue = ar[ar_i]; 
     printf("%i", tempValue);    
    }else if(tempValue == value){ 

     counter = counter + 1; 
    } 
} 

[pool drain]; 
return 0; 

}

のprintf( "%I"、tempValue)。たとえば、 "1598483120"という出力が得られます。 任意のオブジェクトをキャストして(int)助けません。

私は何か間違っていましたか?または何が起こっている?

+1

「tempValue」は初期化されていません。 –

+1

'int ar [n];'は初期化されていないローカル配列です。 –

+0

私のコメントはCタグのものでした。質問のタイトルに "Objective-c"と書かれているのはなぜですか? 'NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];'はCコードで何をしますか? –

答えて

2

int ar[n]を定義しますが、値で初期化しません。 int value = ar[ar_i]を書くときのように、初期化されていない変数にアクセスすると、未定義の動作になります。これはしばしば "ガベージ"値につながりますが、他の動作ももちろん可能です。変数tempValueについても同様です。

変数にアクセスする前に必ず変数を初期化してください。 for (int i=0; i<n; i++) arr[i] = 0;およびint tempValue=0である。

さらに、objective-cを使用している場合は、IDE(XCode)は、.mmソースファイルにCを使用していない可能性があります。次に、int arr[n]のような可変長配列はサポートされないかもしれません。

+0

ありがとう!あなたの右のar [n]は空でした。そして、私はループ内で "scanf()を削除しました(出力ログだと思いました)。このメソッドが配列に値を追加することを知っています。 – Klinki

関連する問題