2 * n 분수를 보유 할 수있는 동적 배열을 만들어야합니다. 동적 배열을 할당 할 수없는 경우 메시지를 인쇄하고 exit (1)를 호출합니다. 다음은 분자가 이 1과 20 사이의 감소 된 임의의 분수로 배열을 채 웁니다. 그의 초기 분모 인 은 2와 20을 포함한다.분수 배열 만들기
나는 분수를 생성하고 축소하는 함수를 준비했습니다. 이게 내가 가진거야. 이 프로그램을 컴파일하고 실행할 때 충돌이 발생하여 이유를 찾을 수 없습니다. test.c에 10 대신 1을 넣으면 충돌이 발생하지 않지만 나에게 미친 부분이 있습니다. 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;
}
이 나는이 두 가지 기능을 테스트하는 데 사용하고 무엇이다. 당신의 createFractionArray에서
TEST.C
#include "Fraction.h"
#include "FractionSumTester.h"
#include <stdio.h>
int main()
{
createFractionArray(10);
return 0;
}
당신은 대부분의 리눅스 시스템에서 점에 유의해야한다 malloc에 항상 메모리 오버 커밋이 (http://opsmonkey.blogspot.com/2007/01/linux-memory-overcommit.html) 당신에게 요청 된 메모리를 제공하기 때문에 성공 만합니다 실제로 사용하려고 할 때까지 실제로 할당하지 않습니다. 이것이 클래스에 대한 것이므로 걱정할 필요가 없습니다. 그러나 이것 때문에 도입 된 모든 종류의 버그가있을 수 있으므로 마음에 두는 것이 좋습니다. – Falmarri