【发布时间】:2014-12-07 21:08:35
【问题描述】:
我正在尝试将一系列矩阵存储在一个连续的内存块中,然后检索它们。每个数组的大小相同 (n x n)。
据我了解,我需要做的是:
分配并初始化我需要存储/检索的每个数组。
分配一块大小为
(# 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;
}
}
}
【问题讨论】: