您需要为矩阵分配空间。简单地分配值m.elements[i][j]
将尝试访问未知位置的内存,因为m.elements
将未初始化并且将具有基本上随机的值。您的程序可能无法访问它,或者它可能没有正确对齐。构建一个函数来创建一个rows
×cols
矩阵:
// Initialize and return a passed-in matrix.
// matrix must point to an allocated struct, not NULL.
void build(Matrix * const matrix, const size_t rows, const size_t cols) {
matrix->rows = rows;
matrix->cols = cols;
matrix->elements = malloc(rows * sizeof(int *));
for (size_t row = 0; row < rows; row++) {
matrix->elements[row] = malloc(cols * sizeof(int));
}
}
请注意,您可以创建任何形状的数组。如果您需要创建对称矩阵,您只需要存储不低于主对角线的项目。
由于这会动态分配二维数组,因此free
您在完成后对它负责:
void destroy(Matrix * const matrix) {
for (size_t row = 0; row < matrix->rows; row++) {
free(matrix->elements[row]);
}
free(matrix->elements);
}