我创建了一个名为ArrayCount的结构,其中包含一个双精度数组和一个整数,该整数应计算数组出现的频率。
如果双精度数组的大小为n,则想法是创建大小为n的struct ArrayCount的数组! (n!在我的代码中称为m)。
这个想法是为了保护给定算法的ArrayCount-array中的每个排列,计算每个排列的出现次数。 但这只是背景信息,而不是问题的一部分。
我在分配内存时遇到问题。 Array-Count数组的分配工作正常,但是我无法为包含的双数组分配内存。
错误消息是:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
当我尝试使用“ double * array_counts[i].array = calloc(n, 8);
分配内存时,在initial_array_counts函数期间发生了错误。
预先感谢, 蒂莫
typedef struct {
double* array;
int counter;
} ArrayCount;
void initiate_array_counts(/*INOUT*/ArrayCount* array_counts,
/*IN*/int n){
int m = factorial(n);
for(int i = 0; i < m; i++){
double* array_counts[i].array = calloc(n, 8);
for(int j = 0; j < n; j++){
array_counts[i].array[j] = 0;
}
}
}
void shuffle_frequency(int n) {
double a[n];
for (int i = 0; i < n; i++) {
a[i] = i; // 0, 1, 2, ..., n - 1
}
int m = factorial(n);
ArrayCount* array_counts = calloc(m, sizeof(ArrayCount));
initiate_array_counts(array_counts, n);
for (int i = 0; i < 1000 * m; i++) {
shuffle(a, n);
update_array_counts(array_counts, m, a, n);
}
for (int i = 0; i < m; i++) {
printf("%4d%8d ", i, array_counts[i].counter);
printdaln(array_counts[i].array, n);
}
free(array_counts);
}
(我只包含必要的代码)