【发布时间】:2017-06-26 14:08:23
【问题描述】:
我想使用指向指针的指针初始化一个二维数组,我编写了以下代码。
下面的代码是很多硬编码,但由于我是指针的初学者,所以我想这样做。
该代码未将输出视为分段错误。
不过在我看来一切都很好。
#include<stdio.h>
#include<stdlib.h>
int readinput1(int **a,int row,int column);
int readinput2(int **b,int row,int column);
int sumoftables(int **a,int **b,int **c,int row,int column);
int displayresult(int **c,int row,int column);
int main()
{
int **a,**b,**c,row,column;
printf("no.of rows of desired matrix:");
scanf("%d",&row);
printf("no.of columns of desired matrix:");
scanf("%d",&column);
a=(int**)malloc(row*column*sizeof(int));>can i do the memory allocation like this
readinput1(a,row,column);
b=(int**)malloc(row*column*sizeof(int));
readinput2(b,row,column);
c=(int**)malloc(row*column*sizeof(int));
sumoftables(a,b,c,row,column);
printf("\n\n\n");
displayresult(c,row,column);
}
int readinput1(int **a,int row,int column)
{
int p,q;
for(p=0;p<row;p++)
{
for(q=0;q<column;q++)
{
scanf("\n%x",(*(a+p)+q));
}
}
return 0;
}
int readinput2t2(int **b,int row,int column)
{
int p,q;
for(p=0;p<row;p++)
{
for(q=0;q<column;q++)
{
scanf("\n%x",(*(b+p)+q));
}
}
return 0;
}
int sumoftables(int **a,int **b,int **c,int row,int column)
{
int p,q;
for(p=0;p<row;p++)
{
for(q=0;q<column;q++)
{
*(*(c+p)+q)=*(*(a+p)+q)+*(*(b+p)+q);
}
}
return 0;
}
int displayresult(int **c,int row,int column)
{
int r,s;
for(r=0;r<row;r++)
{
for(s=0;s<column;s++)
{
printf("\t%d",*(*(c+r)+s));
}
printf("\n");
}
return 0;
}
[1]: https://i.stack.imgur.com/aj1AI.png
【问题讨论】:
-
a=(int**)malloc(row*column*sizeof(int));错误,您需要为 n(行数)"pointers" 预留空间到int,而不是:a = malloc(row * sizeof(int *));或更好@ 987654326@,b和c也一样,然后需要循环使用a[i] = malloc(column * sizeof **a);为表格的每一行预留空间。 -
你所做的只是创建一个大小为 row*col 的一维数组,而不是一个二维数组。
标签: c pointers multidimensional-array segmentation-fault