2015-09-20 2 views
0

Я не могу решить эту проблему, я не уверен, что это на данный момент, но ошибка протектора не исчезнет. Кажется, я не могу найти, что я делаю неправильно. Этот код может быть немногочисленным для чтения (извините), но его очень просто. Я в основном вызываю функцию из main и передаю массив значений функций, оттуда im передавая две фракции за раз до метода, чтобы найти LCM (наименьшее общее число) с использованием знаменателей и вернуть значение. Но ошибка потока, по-видимому, возникает при вызове метода findLCM из функции в точке, где объявлен метод.Отладка исходного кода Objective-C: Ошибка потока

@interface Fraction: NSObject 
@property int numerator, denominator; 

-(Fraction *)findLCM:(Fraction *)fraction withXFractions:(int)Xfraction; 

    @implementation Fraction 

-(Fraction *)findLCM:(Fraction *)fraction withXFractions:(int)Xfraction{ 
int lcmOfFraction = 0; 
int a, b; 
a = fraction.denominator; 
b = self.denominator; 
int max =(a>b) ? a : b; // get max value out of the two denominators. 

    for (int i = 0; i < Xfraction; i++) { 
    while(1)      /* Always true. */ 
    { 
     if(max%a==0 && max%b==0) 
     { lcmOfFraction = max; 
      break; /* while loop terminates. */ 
     }  

     ++max; 
    } 
} 
    Fraction *lcmDenominator = [Fraction new]; 
    [lcmDenominator setTo:0 over:max]; //passing just LCM (denominator of 2 fractions) 
    return lcmDenominator; 
} 



Fraction *addFraction(Fraction **arrayOfFractions, int arraySize) { 
    Fraction *LCM = [[Fraction alloc] init]; 
    int lcmOfFractions = 0; 
    [LCM setTo:0 over:1]; 

for (int i = 0; i <= arraySize; i++) { 
    LCM = [LCM findLCM:arrayOfFractions[i] withXFractions:4]; 
    //^gets the LCM (the common denominator) 
} 
    return LCM; 

} 

    int main() { 
    @autoreleasepool { 

[frac1 setTo:2 over:12]; [frac2 setTo:2 over:4]; 
[frac3 setTo:6 over:8]; [frac4 setTo:8 over:3]; 

Fraction __autoreleasing *arrayOfFractions[4] = {frac1, frac2, frac3, frac4 }; 
Fraction *LCMFraction = addFraction(arrayOfFractions, 4); 
//common LCM return 
     } 
} 

ответ

0

Вы не создали тему в этом коде. Когда вы задаете такой вопрос, вы должны четко объяснить, что такое ошибка, и то, что вы пытались найти в своем источнике. Тогда люди могут помочь вам.

Некоторые подсказки/предложения:

  • использовать точки останова, чтобы остановить свой код во время выполнения, чтобы позволить вам изучить значения переменных
  • обратить пристальное внимание на индексации операций, вы используете массив C и те не делают проверку границ
  • спросите, использует ли здесь массив C, а не NSArray - ваш лучший выбор. Обратите внимание, что ничего плохого в использовании C-массивов при необходимости.
  • __autoreleasing, вероятно, не означает, что вы думаете, что это так, редко видно, что это явно используется в коде пользователя.

Если у вас есть конкретный вопрос, когда вы задаете новый вопрос о SO, кто-то, вероятно, сможет вам помочь.

HTH

+0

извините за недостаток информации. Но я, кажется, имею ошибку в точке, где объявлен метод findLCM после того, как он был вызван из функции, не уверен, что он имеет какое-то отношение к возвращаемому объекту или самому объявлению. Любая помощь была бы полезна. –

+0

@HumzaaChoudryy - «или само объявление» - если декларация * * передает компилятор, то она не может быть источником ошибки времени выполнения (подумайте об этом). Вы добавили точки останова и шагнули через ваш код, наблюдая за значениями ваших переменных, как вы это делаете? Как насчет проверки этих операций индексирования? И т.д., вы должны вскоре обнаружить свою ошибку, выполнив это. – CRD

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

  • Нет связанных вопросов^_^