我正在编写一个使用分数的小程序:
struct fraction
{
int num;
int den;
};
typedef struct fraction FRAC;
我使用最不常见的多重函数来添加两个分数(之后不再简化它们):
FRAC *add (FRAC a, FRAC b)
{
int l = lcm(a.den, b.den);
FRAC *sum;
sum = malloc(sizeof(FRAC));
sum->den = l;
int la = l/a.den;
int lb = l/b.den;
sum->num = a.num*la + b.num*lb;
return sum;
}
给定一个FRAC
数组我想用以下函数计算总和:
FRAC* fraction_sum (FRAC *a, unsigned int size)
{
int i;
FRAC* sum = malloc(sizeof(FRAC));
sum->num = 0;
sum->den = 0;
for (i = 0; i < size; i++)
{
FRAC b = {sum->num, sum->den};
sum = add(b,a[i]);
}
return sum;
}
然而这个表达
print(*fraction_sum(fractions, N));
返回错误
Floating point exception (core dumped)
有什么想法吗?有更优雅的方式吗?
答案 0 :(得分:5)
看起来你正在除以零。
答案 1 :(得分:0)
将您的初始化更改为
sum->den = 1;
答案 2 :(得分:0)
你除以零。
第一次调用函数add时,参数 a 的 num 和 den 都等于零。 这会导致您在此表达式中稍后获得该异常。
int la = l/a.den;
将b.den初始化为1可以阻止程序崩溃。 但它可能不会产生我害怕的正确数额。