2015-01-16 2 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 размера)' вы отправляете указатель на достаточное пространство памяти (размер * 4 байта) на указатель 'array' – Haris

+0

' Бесконечный цикл'? – BLUEPIXY

+2

Можем ли мы увидеть вызов функции? Кроме того, 'i ++' никогда не выполняется. – Igor

ответ

3

Это не вызывает ошибку сегментации, но этот код переходит в бесконечный цикл. Это потому, что вы размещаете i++ в блоке else. Он никогда не увеличивается.

Разместите его за пределами блока else.

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

@Downvoter, комментарий будет оценен. – haccks

+1

Ха-ха, я только что заметил и исправил его, спасибо! –

+0

@ lisacarlisle hacce могут смеяться, если вы «принимаете» ответ! –