我正在编写Xcode版本11.2中用于添加两个矩阵的代码。初始矩阵的显示有效,但它们的加法则无效。错误出现在“添加”功能中的aloc3[i][j]=*(aloc1+i*m+j)+*(aloc2+i*m+j);
行。我真的不知道自己做错了什么,并且花了数小时来尝试解决问题,但似乎没有任何解决办法。有人能帮我吗?
#include <stdio.h>
#include <stdlib.h>
void add(int *aloc1,int *aloc2,int **aloc3,int m,int n);
void display(int *aloc,int m,int n);
int main() {
int *aloc1,*aloc2,*aloc3;
int m,n,i,j;
printf("\n Enter the number of rows : ");
scanf("%d",&m);
printf("\n Enter the number of colomns : ");
scanf("%d",&n);
if ((aloc1=(int*)malloc(n*m*sizeof(int))))
{
printf("\n Enter the elements of the first matrix: ");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",aloc1+i*m+j);
}
if ((aloc2=(int*)malloc(n*m*sizeof(int))))
{
printf("\n Enter the elements of the second matrix: ");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",aloc2+i*m+j);
}
printf("\n The initial matrics are: \n");
display(aloc1,m,n);
printf("\n \n");
display(aloc2,m,n);
add(aloc1,aloc2,&aloc3,m,n);
printf("\n The addition of the matrics is: \n");
display(aloc3,m,n);
return 0;
}
void add(int *aloc1,int *aloc2,int **aloc3,int m,int n)
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
aloc3[i][j]=*(aloc1+i*m+j)+*(aloc2+i*m+j);
}
void display(int *aloc,int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%d ",*(aloc+m*i+j));
printf("\n");
}
}
最佳答案
您正在将指向单个int*
的指针传递给add
的aloc3
参数。因此,对于aloc3[i]
,用i>0
访问它是未定义的行为,因为aloc3
并不指向数组。
您可能打算编写(*aloc3)[i*m+j]
,然后对其他参数进行索引。
即使这样,也永远不会将aloc3
设置为main
中的任何值,也不会将任何值设置为*aloc3
中的add
。因此,(*aloc3)[i*m+j]
将尝试取消引用不确定的值,从而导致未定义的行为。
您似乎忘记了malloc
或alloc3
中的add
。
关于c - 线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59428413/