gpt4 book ai didi

c - 如何在 C 中初始化二维数组

转载 作者:行者123 更新时间:2023-12-04 04:37:37 24 4
gpt4 key购买 nike

我试图在 C 中初始化相同二维数组的两个副本。但是,只有一个存储正确的数据:

    //convert 1D array to 2D array
double** myA = malloc(n*sizeof(double*));
for (j=0;j<n;j++)
myA[j]=&a[j*n];

double** myS = (double **) malloc(n*sizeof(double*));
for (i=0; i<n; i++)
for (j=0; j<n; j++){
myS[i] = (double *) malloc(n*sizeof(double));
myS[i][j] = myA[i][j];
}

printf("A:\n");
print_matrix(myA,n);
printf("S:\n");
print_matrix(myS,n);

我想初始化 A 的两个副本。一个为 myA,另一个为 myS。但是,这是我的输出:
A:
0.000000 1.000000 2.000000 3.000000 4.000000
1.000000 1.414214 2.236068 3.162278 4.123106
2.000000 2.236068 2.828427 3.605551 4.472136
3.000000 3.162278 3.605551 4.242641 5.000000
4.000000 4.123106 4.472136 5.000000 5.656854

S:
-0.000000 -0.000000 -0.000000 -0.000000 4.000000
-0.000000 -0.000000 -0.000000 -0.000000 4.123106
-0.000000 -0.000000 -0.000000 -0.000000 4.472136
-0.000000 -0.000000 -0.000000 -0.000000 5.000000
-0.000000 -0.000000 -0.000000 -0.000000 5.656854

为什么所有的列都是最后一个 -0.000000 ?

最佳答案

您正在覆盖每行缓冲区 N-1 次(并且像筛子一样泄漏内存会在此过程中泄漏水)。

改变这个:

for (i=0; i<n; i++)
for (j=0; j<n; j++){
myS[i] = (double *) malloc(n*sizeof(double));
myS[i][j] = myA[i][j];
}

对此:
for (i=0; i<n; i++)
{
myS[i] = malloc(n*sizeof(double));
for (j=0; j<n; j++)
myS[i][j] = a[i*n+j];
}

注意上面代码中的两点:
  • Don't cast malloc.
  • myA不需要临时数组。您可以自己使用索引进行数学计算。把整个东西都扔掉。
  • 关于c - 如何在 C 中初始化二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19461668/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com