动态分配的二维数组未初始化
Dynamically Allocated 2D-Array not initializing
这段代码应该分配、初始化和打印一个二维数组。出于某种原因,根据 N 的值,第 4 列具有不同的值。 (一切都应该是 0)。
int N = 10;
int **A;
int i, j;
A = malloc(N * sizeof(int *));
for (i = 0; i < N; i++)
A[i] = malloc(N * sizeof(int));
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%d ", A[i][j]);
printf("\n");
}
示例输出:
0 0 0 0 12 0 0
0 0 0 0 10 0 0
0 0 0 0 8 0 0
0 0 0 0 6 0 0
0 0 0 0 0 0 0
0 0 0 0 2 0 0
0 0 0 0 0 0 0
你写的地方
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
使用
A[i][j]=0;
或者你只初始化对角线。更好的是:使用 calloc
分配数组:
for (i = 0; i < N; i++)
A[i] = calloc(N, sizeof(int));
然后内存将初始化为零,您将不再需要执行任何操作。
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
将仅初始化 A[i] 的第 1 - N 个元素。 A[i][j]=0;
这里就是你想要的。
还可以考虑使用 memset 来初始化该数组:
for (int i = 0; i < N; i++)
memset(A[i], 0, N * 4); // sizeof(int) = 4
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
应该是
for (i=0;i<N;i++)
for (j=0;j<N;j++)
A[i][j]=0;
i
和j
的值应该从0
开始,A[i][i]
应该是A[i][j]
您只是在初始化 "matrix" 的对角线,A[0][0]
除外,因为您在索引 1
:
处开始循环,它仍未初始化
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
你需要
for (i=0;i<N;i++)
for (j=0;j<N;j++)
A[i][j]=0;
或使用memset
将内部数组中的所有值设置为0
。
for (i=0;i<N;i++)
memset(A[i], 0, N*sizeof(int));
我认为你的代码有错误:
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
应该是
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][j]=0;
这段代码应该分配、初始化和打印一个二维数组。出于某种原因,根据 N 的值,第 4 列具有不同的值。 (一切都应该是 0)。
int N = 10;
int **A;
int i, j;
A = malloc(N * sizeof(int *));
for (i = 0; i < N; i++)
A[i] = malloc(N * sizeof(int));
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%d ", A[i][j]);
printf("\n");
}
示例输出:
0 0 0 0 12 0 0
0 0 0 0 10 0 0
0 0 0 0 8 0 0
0 0 0 0 6 0 0
0 0 0 0 0 0 0
0 0 0 0 2 0 0
0 0 0 0 0 0 0
你写的地方
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
使用
A[i][j]=0;
或者你只初始化对角线。更好的是:使用 calloc
分配数组:
for (i = 0; i < N; i++)
A[i] = calloc(N, sizeof(int));
然后内存将初始化为零,您将不再需要执行任何操作。
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
将仅初始化 A[i] 的第 1 - N 个元素。 A[i][j]=0;
这里就是你想要的。
还可以考虑使用 memset 来初始化该数组:
for (int i = 0; i < N; i++)
memset(A[i], 0, N * 4); // sizeof(int) = 4
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
应该是
for (i=0;i<N;i++)
for (j=0;j<N;j++)
A[i][j]=0;
i
和j
的值应该从0
开始,A[i][i]
应该是A[i][j]
您只是在初始化 "matrix" 的对角线,A[0][0]
除外,因为您在索引 1
:
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
你需要
for (i=0;i<N;i++)
for (j=0;j<N;j++)
A[i][j]=0;
或使用memset
将内部数组中的所有值设置为0
。
for (i=0;i<N;i++)
memset(A[i], 0, N*sizeof(int));
我认为你的代码有错误:
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][i]=0;
应该是
for (i=1;i<N;i++)
for (j=1;j<N;j++)
A[i][j]=0;