2016-03-02 3 views
1

Моя программа вылетает, когда она достигает этой функции в моем коде. Я напечатал массивы в функции, которые идут и прокомментировал все остальное, и они правильно передаются. Я не могу понять, почему он падает здесь.Изменение значения элементов в массиве в C

Массивы представляют собой номера в порядке возрастания.
Возможно, мои петли или заявления недействительны? Я думаю, может быть, я неправильно меняю значение в массиве по индексу «d», когда он достигает attackerArmy[d] = '0'; //represent 0 as defeated?

long int defeatedArmies(long int* attackerArmy, long int* defenderArmy, long int size){ 

    long int i,j,defeated = 0,d; 

    for(i=0;i<size;i++){ 
     for(j=0;j<size;j++){ 

     //loop for the highest attack value that is lower than defender 
      if(attackerArmy[j] < defenderArmy[i]) 
       d = j; // save the index where it is highest 

      if(attackerArmy[j] > defenderArmy[i]) 
      //no point in checking unnecessary values 
       break; 
     } 
     attackerArmy[d] = '0'; //represent 0 as defeated 
    } 

    for(i=0;i<size;i++){ 
     if(attackerArmy[i] == 0) //count how many defeated armies happened 
      defeated++; 
    } 
return defeated; 
} 

ответ

3

Проблема
если attackerArmy[j] >= defenderArmy[i] правда, d остается неинициализированным причиной неопределенного поведения при доступе к его стоимости в attackerArmy[d] = '0';.

Возможно исправить
Initialize d при объявлении его.

например:

long int d = -1L; 
... 
if(d != -1L) attackerArmy[d] = '0'; 
+0

ах да, не думал об этом. есть одно исправление. он пока не падает. Но теперь, когда я пытаюсь напечатать новый массив (attackerArmy), где некоторые вещи могут быть обнулены после того, как он покинет первые два цикла. Он заполнен множеством разных чисел, которые не были в любом массиве до – Hispazn

+0

@Hispazn Это звучит как другая проблема. Это новый номер 48 (0x30)? Вы имели в виду «0», а не 0 или «\ 0» в строке атакующегоArmy [d] = '0' ;? –

+0

да: O и вы можете объяснить мне разницу между «0» и «0»? Я знаю, что \ 0 - всего лишь нулевой символ, да? – Hispazn

Смежные вопросы