0

我似乎无法解决这个问题,我现在不确定它是什么,但胎面错误不会消失。我似乎找不到我做错了什么。这段代码可能很难阅读(抱歉),但它非常简单。我基本上是从 main 调用一个函数并传递一个函数值数组,从那里我一次将两个分数传递给一个方法,以便它使用分母找到 LCM(最小公倍数)并返回值。但是,在声明方法的位置从函数调用 findLCM 方法时似乎发生了线程错误。

@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 
      }
 }
4

1 回答 1

0

您在此代码中没有创建线程。当问这样的问题时,你应该清楚地解释错误是什么,以及你试图找到它的来源。然后人们可能会帮助你。

一些提示/建议:

  • 使用断点在执行期间停止代码,以允许您检查变量的值
  • 密切注意索引操作,您使用的是 C 数组,而那些不做边界检查
  • 询问这里是否使用 C 数组而不是 anNSArray是您的最佳选择。请注意,在适当的时候使用 C 数组并没有错
  • __autoreleasing可能并不意味着你认为它做了什么,很少看到在用户代码中明确使用它。

如果您在进一步询问有关 SO 的新问题时有特定问题,那么有人可能会帮助您。

高温高压

于 2015-09-20T07:58:59.030 回答