Я не могу решить эту проблему, я не уверен, что это на данный момент, но ошибка протектора не исчезнет. Кажется, я не могу найти, что я делаю неправильно. Этот код может быть немногочисленным для чтения (извините), но его очень просто. Я в основном вызываю функцию из 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
}
}
извините за недостаток информации. Но я, кажется, имею ошибку в точке, где объявлен метод findLCM после того, как он был вызван из функции, не уверен, что он имеет какое-то отношение к возвращаемому объекту или самому объявлению. Любая помощь была бы полезна. –
@HumzaaChoudryy - «или само объявление» - если декларация * * передает компилятор, то она не может быть источником ошибки времени выполнения (подумайте об этом). Вы добавили точки останова и шагнули через ваш код, наблюдая за значениями ваших переменных, как вы это делаете? Как насчет проверки этих операций индексирования? И т.д., вы должны вскоре обнаружить свою ошибку, выполнив это. – CRD