2015-01-16 1 views
0
int position_of_largest(int * array, int size) 
{ 
    int largest, i, largest_i; 
    i = 0; 
    largest_i = 0; 
    while (i < size) 
    { 
    if (i == 0) 
    { 
     largest = array[0]; 
     largest_i = 0; 
    } 
    else 
    { 
     if (largest < array[i]) 
     { 
     largest_i = i; 
     largest = array[i]; 
     } 
     i++; 
    } 
    } 

    return largest_i; 
} 

이 코드는 배열에서 가장 높은 요소의 인덱스를 찾아서 반환합니다. 이 코드에는 세그멘테이션 오류가 있습니다. 그러나 나는 그것이 무엇인지 전혀 모릅니다! 나는 여러 번 코드를 살펴 봤는데 어떤 문제도 보이지 않는다. 나는 C, btw에 익숙하지 않다 (많은 것을 설명한다). 감사.왜이 함수는 결코 반환하지 않습니까? 세분화 오류입니까?

+0

세그먼트 오류가 .. 당신이 기능'position_of_largest (INT의 * 배열, INT 크기)를 호출 할 때 내가 희망 입니다'당신은 포인터를 보내는 충분한 메모리 공간 (크기 * 4 바이트)을 '배열'포인터 – Haris

+0

'무한 루프'? – BLUEPIXY

+2

함수 호출을 볼 수 있습니까? 또한'i ++'는 절대 실행되지 않습니다. – Igor

답변

3

세그먼트 화 오류가 발생하지 않지만이 코드는 무한 루프로 바뀝니다. else 블록에 i++을 배치했기 때문입니다. 그것은 결코 증가하지 않습니다.

else 블록 외부에 놓으십시오. 당신이 할당 - 해제 또는 취소 권한 메모리 공간에 액세스하려고 할 때

else { 
    if (largest < array[i]) { 
     largest_i = i; 
     largest = array[i]; 
    } 
} 
i++; 
+1

@Downvoter, 의견을 보내 주시면 감사하겠습니다. – haccks

+1

하하 그냥 고맙다 고 고쳐 주셔서 고마워요 !! –

+0

@lisacarlisle haccks는 대답을 "수락"해도 웃을 수 있습니다! –

관련 문제