Pointers 为什么这不适用于转置矩阵

Pointers 为什么这不适用于转置矩阵,pointers,matrix,transpose,Pointers,Matrix,Transpose,由于某种原因,元素b[m][n]是一个随机数,而不是1。如果我尝试printfa[n][m],也会发生同样的情况。拜托,我需要一些帮助 #include <stdio.h> #include <stdlib.h> void **alloc(int n,int m) { int **x=(int**)malloc(n*sizeof(int*)); for(int i=1; i<=n; i++) x[i] =(int*)malloc(m*

由于某种原因,元素
b[m][n]
是一个随机数,而不是1。如果我尝试
printfa[n][m]
,也会发生同样的情况。拜托,我需要一些帮助

#include <stdio.h>
#include <stdlib.h>
void **alloc(int n,int m)
{
    int **x=(int**)malloc(n*sizeof(int*));
    for(int i=1; i<=n; i++)
        x[i] =(int*)malloc(m*sizeof(int*));
    return x ;
}

void read(int **a,int n,int m,FILE *f)
{
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            fscanf(f,"%d",&a[i][j]);

}
void print(int **a,int n,int m)
{
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            printf("%d  ",a[i][j]);
        printf("\n");
    }

}
void transpose(int **a,int n,int m,int ***b)
{
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            b[j][i]=a[i][j];

}
int main()
{
    int n,m;

    FILE *f;
    f=fopen("in.txt","r");
    if(f==NULL)
        printf("Error");

    fscanf(f,"%d %d",&n,&m);


    int **a=alloc(n,m);

    read(a,n,m,f);
    int **b=alloc(m,n);
    transpose(a,n,m,b);
    print(b,m,n);





    return 0;
}
#包括
#包括
无效**分配(整数n,整数m)
{
int**x=(int**)malloc(n*sizeof(int*);

对于(int i=1;i有几个问题:

  • 如果这是C代码,则将<代码> MalOC的结果作为可能隐藏的bug。(这不适用于C++代码)
  • 您的“内部”
    malloc
    使用
    sizeof(int*)
    ,而它应该使用
    sizeof(int)
  • 您的
    alloc
    函数返回
    void**
    ,这本身并没有错,但为什么不让它返回
    int**
  • 这是最重要的一点:C数组索引从零开始,因此如果有一个由N个元素组成的数组,它们的编号从0到N-1