我必須創建一個能夠保存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;
}
你應該注意到,在大多數linux系統上,malloc總是會成功,因爲內存過量使用(http://opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html)會給你請求的內存,但直到你嘗試使用它纔會真正分配它。我相信這是爲了一個班級,所以你不必擔心這個問題,但要記住,因爲可能會引入各種各樣的錯誤,因爲這個 – Falmarri 2010-11-25 18:21:48