1
我想洗牌二維數組的至少一個索引,以便我可以總結一個隨機的數組部分。程序工作正常,直到我嘗試調用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);
}