Я пытаюсь сохранить ряд матриц в непрерывном блоке памяти, а затем восстановить их. Каждый массив будет иметь тот же размер (n x n).Хранение массива из 2d массивов в C
Насколько я понимаю, что мне нужно сделать, это:
Выделяют и инициализировать каждый массив, мне нужно, чтобы сохранить/восстановить.
Выделяют непрерывный блок памяти размером
(# arrays) * sizeof (1 array)
и присвоить указатель,***matrices
, к началу блокаСкопируйте каждый массив в блок на
matrices[0]
,matrices[1]
...Распечатайте их, отправив
matrices[0]
,matrices[1]
... кmatrix_print
функции
Теперь, очевидно, я что-то недопонимаю, потому что он не работает. Это выход я получаю прямо перед он выходит из строя:
Matrix A is 16 bytes.
Matrix B is 16 bytes.
So, we will allocate 32 bytes in row_blocks.
Matrix A:
| 1 1 |
| 2 2 |
Matrix B:
| 2 2 |
|
Вот код для моего теста, что я пытаюсь получить работу:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void matrix_print(int dim, int ***matrix);
void matrix_init(int dim, int matrix[dim][dim], int val);
int main(int argc, char *argv[])
{
int dim = 2;
int A[dim][dim], B[dim][dim];
matrix_init(dim, A, 1);
matrix_init(dim, B, 2);
printf("Matrix A is %d bytes.\n", sizeof A);
printf("Matrix B is %d bytes.\n", sizeof B);
int ***matrices = malloc(sizeof A + sizeof B);
printf("So, we will allocate %d bytes in matrices.\n\n",
sizeof A + sizeof B);
memcpy(matrices[0], A, sizeof (A));
memcpy(matrices[1], B, sizeof (B));
printf("Matrix A:\n");
matrix_print(dim, &matrices[0]);
printf("Matrix B:\n");
matrix_print(dim, &matrices[1]);
return 0;
}
void matrix_print(int dim, int ***matrix)
{
for (int i = 0; i < dim; i++) {
printf("|");
for (int j = 0; j < dim; j++) {
printf("%2d ", matrix[i][j]);
}
printf("|\n");
}
}
void matrix_init(int dim, int matrix[dim][dim], int val)
{
for (int i = 0; i < dim; i++) {
for (int j = 0; j < dim; j++) {
matrix[i][j] = val;
}
}
}
Получил это, спасибо большое. Я на самом деле попробовал int '* matrices [dim] [dim]' раньше и запутался, потому что это не позволило бы VLA. Он работает с круглыми скобками, хотя 'int * (matrices) [dim] [dim]'! – Thomas