Здесь вам не нужны глобальные переменные.Таким образом, вы можете объявить, определить и инициализировать размер вашего массива структуры, а также размеры ваших матриц в основном методе.
Более того, имена ваших методов вводят в заблуждение, я изменил их на что-то, чтосообщает автору, какова цель каждой функции.Или, точнее, ваши методы выполняют более одной задачи.Полезно разделять задачи для повторного использования.
Вот минимальный пример, с которого можно начать:
#include <stdlib.h>
#include <stdio.h>
struct MyStruct
{
double **matrix;
};
double **allocate_matrix(int rows, int cols)
{
double **matrix = malloc(rows * sizeof(double*));
for (int i = 0; i < rows; i++)
matrix[i] = malloc(cols * sizeof(double));
return matrix;
}
void allocate_matrices(struct MyStruct *structs, int size, int rows, int cols)
{
for (int i = 0; i < size; i++)
structs[i].matrix = allocate_matrix(rows, cols);
}
void fill_matrices(struct MyStruct *structs, int size, int rows, int cols)
{
for (int i = 0; i < size; i++)
for(int j = 0; j < rows; j++)
for(int z = 0; z < cols; z++)
structs[i].matrix[j][z] = -1.2;
}
void print_matrices(struct MyStruct *structs, int size, int rows, int cols)
{
for (int i = 0; i < size; i++)
for(int j = 0; j < rows; j++)
for(int z = 0; z < cols; z++)
printf("%f\n", structs[i].matrix[j][z]);
}
void free_matrices(struct MyStruct *structs, int size, int rows) {
for (int i = 0; i < size; i++) {
for(int j = 0; j < rows; j++) {
free(structs[i].matrix[j]);
}
free(structs[i].matrix);
}
}
int main()
{
int rows = 3, cols = 4, size = 2;
struct MyStruct *structs = malloc(size * sizeof(struct MyStruct));
structs[0].matrix = NULL;
structs[1].matrix = NULL;
if(structs[0].matrix == NULL)
printf("null\n");
allocate_matrices(structs, size, rows, cols);
if(structs[0].matrix == NULL)
printf("null\n");
fill_matrices(structs, size, rows, cols);
print_matrices(structs, size, rows, cols);
free_matrices(structs, size, rows);
free(structs);
}
Вывод:
null
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
-1.200000
Вдохновленный моим 2D динамический массив (C) .