С динамическим распределением памяти.Проблема с динамическим размещением массива массивов - PullRequest
0 голосов
/ 20 декабря 2018

Я создал структуру с именем ArrayCount, которая содержит двойной массив и целое число, которое должно подсчитывать, как часто встречается массив.

Если размер двойного массива равен n, идея состоит в том, чтобысоздать массив структуры ArrayCount размером n!(в моем коде n! называется m).

Идея состоит в том, чтобы сохранить каждую перестановку в массиве ArrayCount, считая случаи каждой перестановки, для данного алгоритма.Но это только справочная информация, а не часть проблемы.

У меня проблемы с выделением памяти.Выделение для массива Array-Count работает нормально, но я не могу выделить память для включенных двойных массивов.

Сообщение об ошибке:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token

Иошибка происходит во время функции initiate_array_counts, когда я пытаюсь выделить память с помощью "double * array_counts[i].array = calloc(n, 8);.

Заранее спасибо, Тимо

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);
}

(я включил только необходимый код)

...