2017-11-15 1 views
1

"int value = ar [n]"과 같은 인덱스에서 배열의 int를 원한다면 항상 거대한 정수를 얻습니다. 그것은 최대 크기를 나타냅니다 (나는 생각합니다).Hackerrank Objective-c int 포인터의 값이 올바르지 않습니다.

입력 (표준 입력)

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];'do는 C 코드에서 무엇을합니까? –

답변

2

int ar[n]을 정의하지만 값으로 초기화하지 않습니다. 초기화되지 않은 변수에 액세스하면 int value = ar[ar_i]을 쓸 때처럼 정의되지 않은 동작입니다. 이것은 종종 "쓰레기 (garbage)"값으로 이어 지지만 다른 행동은 물론 가능합니다. 변수 tempValue에도 동일하게 적용됩니다.

변수에 액세스하기 전에 항상 변수를 초기화하십시오 (예 : for (int i=0; i<n; i++) arr[i] = 0;int tempValue=0.

objective-c를 사용하는 경우 IDE (XCode)는 소스 파일 .mm에 C를 사용하지 않고 C++을 사용할 수 있습니다. 그런 다음 int arr[n]과 같은 가변 길이 배열은 지원되지 않을 수 있습니다.

+0

고마워요! 당신의 오른쪽은 비 었어요. 그리고 "(출력 로그 생각) 루프에서 scanf() 제거했습니다. 이제이 메서드는 배열에 값을 추가합니다. 내 멍청한 misstake. – Klinki

관련 문제