我正在使用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
我没有以任何方式修改过第一个数组,只是再次打印出来,为什么这两个数据有什么不同?
答案 0 :(得分:3)
在您的阵型中,malloc
正在使用sizeof(int)
,但您正在为double
创建数组。 Ints通常使用4 bytes
,但double
使用8 bytes
。所以你不是malloc
- 为2-d的双打数组留下足够的内存。
答案 1 :(得分:3)
尝试:
double** makearray(int n2)
{
int i=0;
double** a;
a = malloc(n2 * sizeof(double *)); //<- was sizeof(int *)
if(a == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}
for(i = 0; i < n2; i++){
a[i] = malloc(n2 * sizeof(double)); //<- was sizeof(int)
if(a[i] == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}
}
return a;
}