c-动态分配的2D阵列未初始化



此代码用于分配、初始化和打印二维数组。由于某些原因,根据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;

应该是

for (i=0;i<N;i++)
  for (j=0;j<N;j++) 
    A[i][j]=0;

ij的值应该从0开始,并且A[i][i]应该是A[i][j]

您只初始化"矩阵"的对角线,但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;

或者使用CCD_ 9将内部阵列中的所有值设置为CCD_。

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;

将只初始化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=1;i<N;i++)
  for (j=1;j<N;j++) 
    A[i][j]=0;

相关内容

  • 没有找到相关文章

最新更新