当我尝试运行程序时程序崩溃,我不知道为什么

时间:2014-03-17 21:39:13

标签: c function pointers pointer-to-pointer

我想在函数中返回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;
}

2 个答案:

答案 0 :(得分:1)

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

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

还传递主

中指针的地址
int n, *p;
n = Load_Matrix( &p );

fscanf( fp, "%d", n );错了。 fscanf()需要一个地址n。

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

答案 1 :(得分:0)

这个:

 n=Load_Matrix(p); 

应该是

n=Load_Matrix(&p);

因为Load_Matrix期望获得指向指针的指针。 也是这个

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

应该是

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