我正在构建一个简单的程序来对骰子实验中的数字频率进行计数,但是我尝试对其进行扩展,并将最大掷出次数增加到巨大的数目,并且通过反复试验,我发现最大限制为519253。
使用这个最大值,我也无法创建任何新数组,它会崩溃。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MX 519253
#define DICE 6
void throwdice(int n[], int size);
int genNum();
void printv(int n[], int size);
void countd(int n[], int size, int count[DICE]);
int main ()
{
srand(time(NULL));
int throws[MX];
int count[DICE]={0};
int n;
//printf("Number of dice to throw: ");
//scanf("%d",&n);
n=MX;
throwdice(throws,n);
//printf("Throw\tNumber");
//printv(throws,n);
countd(throws,n,count);
printf("\n\nNumber\tFrequency");
printv(count,DICE);
}
int genNum()
{
int n;
n=rand()%DICE+1;
return n;
}
void printv(int n[], int size)
{
int i;
for (i = 0; i < size; i++)
printf("\n%d \t%d",i+1,n[i]);
}
void throwdice(int n[], int size)
{
int i;
for (i = 0; i < size; i++)
n[i]=genNum();
}
void countd(int n[], int size, int count[DICE])
{
int i;
for (i = 0; i < size; i++)
count[n[i]-1]++;
}
是否有一种方法可以扩展此程序,以解决一百万次抛出?
答案 0 :(得分:3)
尝试更改此内容;
int throws[MX];
为此,或将其移至全局范围;
static int throws[MX];
我认为您可能正在堆栈溢出。
您可以尝试像这样将数组放在堆上;
int *throws = malloc(sizeof(int)*MX);