Динамическое создание 3d матрицы в c - PullRequest
0 голосов
/ 09 апреля 2019

Мне нужно создать 2-мерную матрицу, и в каждую ячейку я должен поместить массив, длина которого вычисляется в функции, когда я пытаюсь выполнить следующий код, он разбивается с ошибкой Segmentation fault (core dumped).На мой взгляд, матрица имеет N_Sweep строк, N столбцов и последнее измерение вычисляется в функции.

double ***gamma;
gamma = malloc(N_Sweep*sizeof(double**));
for(i=0;i<N_Sweep;i++){
    gamma[i] = malloc(N_Sweep*N*sizeof(double*));
}
// ...
for(t=0;t<N;t++){
    for(i = 0; i<N_Sweep; i++){
        for(t_M = 1; t_M<(N_Sweep - i); t_M++){
            gamma[i][t] = malloc(sizeof(double) * (N_Sweep-i));
            gamma[i][t][t_M] = 3.0;
        }
    }
}

прототип функции: void gamma_computation(double ***gamma);

1 Ответ

0 голосов
/ 09 апреля 2019

Сначала вы должны выделить только N * sizeof(double *) байтов в первом цикле, потому что вы хотите, чтобы N столбцов не N * N_Sweep, также внутри третьего вложенного цикла вы выделяете третье измерение матрицы несколько раз (утечка памяти ) когда вы должны сделать это только один раз перед входом в цикл.

Таким образом, код должен быть:

double ***gamma;
gamma = malloc(N_Sweep*sizeof(double**));
for(i=0;i<N_Sweep;i++){
    gamma[i] = malloc(N*sizeof(double*));
}
// ...
for(t=0;t<N;t++){
    for(i = 0; i<N_Sweep; i++){
        gamma[i][t] = malloc(sizeof(double) * (N_Sweep-i));
        for(t_M = 1; t_M<(N_Sweep - i); t_M++){
            gamma[i][t][t_M] = 3.0;
        }
    }
}
...