objective-c - 创建分数数组

标签 objective-c c

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

我准备好执行将创建分数并减少它的函数。这就是我得到的。当我编译并运行该程序时,它崩溃了,我无法找出原因。如果我在 test.c 中输入 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;


}

这是我用来测试这两个函数的。

测试.c

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


int main()
{

      createFractionArray(10);

   return 0;
}

最佳答案

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

关于objective-c - 创建分数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279736/

相关文章:

objective-c - 以线程安全的方式从环形缓冲区复制 Objective-C 中的数据

c - 是否可以使用 gcc 提高浮点算术的准确性?

objective-c - NSCollectionView 中的选择突出显示

iOS 导航 View 背景图像 UIViewContentModeScaleAspectFill 不工作

ios - 自动布局 4 UILabels 垂直高度根据其内容/文本

c - 十六进制参数 "or"| C 中的运算符

c - 在 Randomized QuickSort 中寻找麻烦(其中 pivot 是一个随机数)

c - WFP 标注和 NDIS LWF 不能位于同一驱动程序二进制文件中

iphone - iPhone 中的应用内购买

objective-c - subview 与 childViewController