我正在使用2D数组,并尝试将其从一个函数传递给另一个函数。我在这里看到了有关此问题的所有答案,但似乎都没有答案。这是我试图实现的简单目标,但是答案很奇怪。
这是main():
int main(void)
{
int i=0,j=0,n=0,n2=0;
double **a, **a1, b=0;
printf("Enter 'n2' :");
scanf("%d", &n2);
a= makearray(n2);
for(i=0; i < n2; i++){
for(j=0; j < n2; j++){
a[i][j] = j;
printf("%.f ",a[i][j]);
}
printf("\n");
}
printf("\n\n\n");
for(i=0; i < n2; i++){ // print a
for(j=0; j < n2; j++){
b = a[i][j];
printf("%.f ", b);
}
printf("\n");
}
printf("\n\n\n");
return 0;
}
函数makearray()仅返回指向作为参数传递的大小为2D数组的指针的指针。
makearray()是:
double** makearray(int n2)
{
int i=0;
double** a;
a = malloc(n2 * sizeof(int *));
if(a == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}
for(i = 0; i < n2; i++){
a[i] = malloc(n2 * sizeof(int));
if(a[i] == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}
}
return a;
}
您可以输入'n2',其中(n2 x n2)成为矩阵大小,并且在n = 9时,输出为:
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 6 7 8
我没有以任何方式修改第一个数组,只是再次打印了一个,为什么这两个不同?
在您的makearray中,malloc
正在使用sizeof(int)
,但是您正在为double
s创建一个数组。整数通常使用4 bytes
,但是double
使用8 bytes
。因此,您没有malloc
为2维双精度数组分配足够的内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句