我正在编写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*的指针传递给addaloc3参数。因此,对于aloc3[i],用i>0访问它是未定义的行为,因为aloc3并不指向数组。

您可能打算编写(*aloc3)[i*m+j],然后对其他参数进行索引。

即使这样,也永远不会将aloc3设置为main中的任何值,也不会将任何值设置为*aloc3中的add。因此,(*aloc3)[i*m+j]将尝试取消引用不确定的值,从而导致未定义的行为。

您似乎忘记了mallocalloc3中的add

关于c - 线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59428413/

10-10 10:54