我试图改变至少一个2D数组的索引,以便我可以总结一个随机的N部分数组。该程序工作正常,直到我尝试调用shuffle函数并导致两种方式之一:如果我调用函数:shuffle(a [i],N);,然后我得到一个“浮点异常”错误,即使我似乎无法通过0找到任何除法或者如果我调用函数:shuffle(* a,N);,我将得到一个分段错误。我还在努力学习指针是如何工作的......任何人都可以帮忙吗?谢谢!
随机播放功能:
void shuffle(double *a, int i)
{
int temp, randomNum, N;
for(i=N; i>1; N--)
{
randomNum = rand() % N;
temp = a[randomNum]; //create temp array
a[randomNum] = a[i];
a[i] = temp;
}
}
主程序:
int main()
{
srand(time(NULL));
int i,j;
int M = 5;
int N = 4;
double sum = 0.;
double **a;
a = malloc(M * sizeof(double *));
if(a == NULL) printf("Failure to allocate memory.\n");
clock_t start = clock();
for(i=1; i<M; i++)
{
a[i] = malloc(M * sizeof(double));
if( a[i] == NULL)
{
printf("Failed to allocated memory for a[%d].\n", i);
exit(0);
}
}
for(i=1; i<M; i++)
{
for(j=1; j<M; j++)
{
a[i][j] = 1.0/(i+j);
printf("a[%d][%d]=%lf\n", i, j, a[i][j]);
shuffle(a[i], N);
//sum = sum + a[i][j];
//printf("shuffleda[%d][%d] and sum = %lf\n", i, j, sum);
}
}
clock_t end = clock();
float seconds = (end - start) / (float) CLOCKS_PER_SEC;
printf("%lf \n", sum);
return(0);
}
答案 0 :(得分:0)
void shuffle
功能中存在一些错误。我对该函数进行了一些修正,它对我有用(使用英特尔的C编译器):
void shuffle(double a[], int N){
double temp;
int randomNum, i;
for(i=N; i>1; i--){
randomNum = rand() % N;
temp = a[randomNum]; //create temp array
a[randomNum] = a[i];
a[i] = temp;
}
}
shuffle(a[i], N);
中的来电main
。 temp
应为双倍,而不是int
。浮点异常是由于在N=0
时采用了模数。
希望这有帮助。