【问题标题】:When I try to run it the program crashes and I don't know why当我尝试运行它时,程序崩溃了,我不知道为什么
【发布时间】:2014-03-17 21:39:12
【问题描述】:

我想在我的函数中返回 n - 矩阵的大小 - 以及 *p 处的矩阵本身。

文件类似于,例如,

3
10
20
30

这就是我的称呼:

main( )
{
    int n, *p;
    n = Load_Matrix( p );
}

int Load_Matrix( int **ptr )
{
    FILE *fp;
    int i, a, n;
    fp = fopen( "matrix.txt", "r" );
    if ( fp == NULL )
    {
        printf( "Cannot load file\n" );
        return 0;
    }
    fscanf( fp, "%d", n );
    *ptr = (int *) malloc( sizeof(int) *n );
    for ( i = 0; i<n; i++ )
    {
        fscanf( fp, "%d", &a );
        *( ptr + i ) = a;
    }
    fclose( fp );
    return n;
}

【问题讨论】:

  • fscanf(fp,"%d",n); --> 应该是&amp;nLoad_Matrix(p); --> 应该是&amp;p
  • @FilipeGonçalves,此类错误由编译器通过一些优化和警告来捕获。

标签: c function pointers pointer-to-pointer


【解决方案1】:

您正在递增传递的指针 ptr 的地址,而不是指针本身。

*( ptr + i ) = a; 行是错误的。应该是(*ptr)[i] = a;

也在main中传递指针的地址

int n, *p;
n = Load_Matrix( &p );

fscanf( fp, "%d", n ); 行是错误的。 fscanf() 需要 n 的地址。

还有一些小错误,比如Load_Matrix()的函数原型,int main(void),检查所有返回值

【讨论】:

  • 这个也解决了我的其他问题.. 糟糕,这实际上是我大学的一个练习,它说根本不使用这个 [] 所以我该如何重写这个 (*ptr)[i] =a;
【解决方案2】:

这个:

 n=Load_Matrix(p); 

应该是

n=Load_Matrix(&p);

Load_Matrix 期望获得指向指针的指针。 还有这个

 fscanf( fp, "%d", n );

应该是

  fscanf( fp, "%d", &n );

【讨论】:

  • @user3420365 fscanf(fp,"%d",n); 应该是fscanf(fp,"%d",&amp;n);(需要将运营商的地址应用到n
猜你喜欢
  • 2022-12-29
  • 2016-04-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多