Создать массив фракций - PullRequest
0 голосов
/ 25 ноября 2010

Мне нужно создать динамический массив, способный содержать 2 * n дробей.Если динамический массив не может быть выделен, печатает сообщение и вызывает exit (1).Затем он заполняет массив сокращенными случайными дробями, числитель которых находится в диапазоне от 1 до 20 включительно;и чей начальный знаменатель составляет от 2 до 20 включительно.

Я готов выполнил функцию, которая собирается создать дробь, и уменьшил ее.это то, что я получил.Когда я скомпилировал и запустил эту программу, она не работает, я не могу понять, почему.Если я поставлю 1 вместо 10 в тесте. Он не падает, но дает мне сумасшедшую долю.Если я поставлю 7,8 или 11 в test.c, он вылетит.Буду признателен, если кто-нибудь сможет мне помочь.

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;


}

Это то, что я использую для проверки этих двух функций.1010 *

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


int main()
{

      createFractionArray(10);

   return 0;
}

1 Ответ

1 голос
/ 25 ноября 2010

В вашей функции createFractionArray () вы используете malloc () для n элементов. Затем в цикле for вы записываете 2 * n элементов в это пространство ... что переполняет ваш буфер и вызывает сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...