创建一个Fraction数组

时间:2010-11-25 17:53:47

标签: objective-c c

我必须创建一个能够容纳2 * n分数的动态数组。  如果无法分配动态数组,则打印消息并调用exit(1)。  它接下来用减少的随机分数填充数组,其分子  在1到20之间,包括在内;并且其最初的分母  在2到20之间,包括在内。

我准备好了创建分数并减少它的功能。这就是我得到的。当我编译并运行该程序时崩溃我无法找出原因。如果我在test.c中放入1而不是10,它不会崩溃,但它给了我一个疯狂的分数。如果我在test.c中放入7,8或11,它将崩溃。如果有人能帮助我,我将不胜感激。

FractionSumTester.c

Fraction randomFraction(int minNum, int minDenom, int max)
{
   Fraction l;
   Fraction m;
   Fraction f;

   l.numerator = randomInt(minNum, max);
   l.denominator = randomInt(minDenom, max);

   m = reduceFraction(l);

 while (m.denominator <= 1)
   {
        l.numerator = randomInt(minNum, max);
    l.denominator = randomInt(minDenom, max);
    m = reduceFraction(l);
   }
   return m;


}


Fraction *createFractionArray(int n)
{
   Fraction *p;
   int i;


   p = malloc(n * sizeof(Fraction));

   if (p == NULL)
   {
     printf("error");
     exit(1);
   }

   for(i=0; i < 2*n ; i++)
   {

      p[i] = randomFraction(1,2,20);
      printf("%d/%d\n", p[i].numerator, p[i].denominator);


   }

   return p;


}

这是我用来测试这两个功能的。

test.c的

#include "Fraction.h"
#include "FractionSumTester.h"
#include <stdio.h>


int main()
{

      createFractionArray(10);

   return 0;
}

1 个答案:

答案 0 :(得分:1)

在createFractionArray()函数中,n个项目的malloc()空间。然后,在for循环中,你将2 * n项写入该空间......这会超出缓冲区并导致崩溃。