我是 C 新手,我正在尝试使用结构和一些将更改结构的 int** 字段的方法来定义矩阵。矩阵应该是动态分配的,并且可以在它可以拥有的行数中调整大小。当我运行下面的程序并在 main 中打印出矩阵的值时,矩阵只有随机值,而不是插入到 genMatrix() 和 addRow() 中的值。我究竟做错了什么?非常感谢任何帮助。
我这样定义结构:
typedef struct matrix {
int** matrix;
int rows;
int cols;
int capacity;
} matrix;
然后有以下方法应该改变结构的字段:
matrix* genMatrix() {
matrix* matrix = malloc(sizeof(matrix));
initMatrix(matrix, 100, 3, 200);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
int row[] = {i+j, i*j, i-j};
addRow(matrix, row);
}
}
return matrix;
}
void initMatrix(matrix* matrix, int rows, int cols, int capacity) {
matrix->matrix = malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
matrix->matrix[i] = malloc(cols * sizeof(int));
}
matrix->cols = cols;
matrix->rows = rows;
matrix->capacity = capacity;
}
void addRow(matrix* matrix, int* row) {
if (matrix->rows == matrix->capacity) {
matrix->capacity *= 2;
matrix->matrix = realloc(matrix->matrix, matrix->capacity * sizeof(int*));
}
matrix->matrix[matrix->rows++] = row;
}
在 main 中,我调用函数 genMatrix,然后将结果打印出来,但会得到随机值,如 32691、-1240670624 等。
int main() {
matrix* matrix = genMatrix();
}