【发布时间】:2021-09-28 23:37:20
【问题描述】:
我需要在一个函数中动态分配一个二维数组,其中包含n 行和m 列,这些列也必须从input 函数中读取。
int main()
{
int** matrix;
int n, m;
input(matrix, &n, &m);
return 0;
}
void input(int** matrix, int* n, int* m) {
if (scanf("%d", n) == 1 && getchar() == '\n') {
if (*n <= 0) {
error = 1;
}
}
if (error == 0) {
if (scanf("%d", m) == 1 && getchar() == '\n') {
if (*m <= 0) {
error = 1;
}
}
}
if (error == 0) {
matrix = (int**)calloc(*n, sizeof(int*));
for (int i = 0; i < *n; i++) {
matrix[i] = (int*)calloc(*m, sizeof(int));
}
for (int i = 0; i < *n && error == 0; i++) {
for (int j = 0; j < *m && error == 0; j++) {
if (scanf("%d", &matrix[i][j]) == 1) {
}
else {
error = 1;
}
}
}
for (int i = 0; i < *n; i++) {
for (int j = 0; j < *m; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
}
它会正确扫描和打印值,但如果我尝试在此函数之外或在另一个函数中与 matrix 交互(例如,仅打印所有值的 output(int** matrix, int *n, int *m)我会得到内存错误。
我该如何解决这个问题? (我需要保留双指针)。
【问题讨论】:
-
直接的方法是将
matrix更改为指向int**的指针以进行更新,就像n和m一样。为什么需要保留双指针?另一种方法是去掉matrix这个没用的参数,让input函数返回新分配的int**。 -
是任务的要求。至少,输入函数中的形参必须和现在一样。
-
函数忽略了
matrix参数的值,而main无论如何都会使用未初始化的值调用它。 -
另一种方法是将
int** matrix视为指向指针(一维数组)的指针,并使用一维数组模拟二维数组,如array[rowIndex * width + colIndex] -
您的确切要求是什么?我怀疑你误会了什么。
标签: arrays c multidimensional-array dynamic-arrays