繁体   English   中英

在C中将未初始化的2D数组作为参数传递

[英]Passing uninitialized 2D arrays as arguments in C

所有。 我已经尽力去解决这个问题,感觉自己已经快到了,但是我对需要多少个“ *”感到困惑! 我有一个函数,将包含数据文件的目录字符串,一个int和指向两个未初始化的2D数组的指针作为输入。 该函数读取数据文件,然后分配内存并相应地填充数组。

我知道这段代码是完全错误的,但是想法是:

void main()
{
  double **Array1;
  int **Array2;
  int dimension1;
  char DirWork[100], buff[100];

  f_ReadData(DirWork, dimension1, &Array1, &Array2);

  sprintf(buff,"%lf",Array1[0][0]); // Causes segmentation fault
  printf(buff);
}

void f_ReadData(char *DirWork, int dimension1, double ***Array1ptr, int ***Array2ptr)
{
  int ct, ct2;
  double **Array1 = *Array1ptr;
  int **Array2 = *Array2ptr;
  char FullDirArray1[100], FullDirArray2[100];
  FILE *d_Array1, *d_Array2;

  sprintf(FullDirArray1,"%s%s,DirWork,"Array1.dat");
  sprintf(FullDirArray2,"%s%s,DirWork,"Array2.dat");

  d_Array1=fopen(FullDirArray1,"r");
  d_Array2=fopen(FullDirArray2,"r");
  fscanf(d_Array1,"%d", &dimension1);

  Array1 = dmatrix(0,dimension1-1,0,3); // allocates memory to Array1 (dimension1 x 3) elements, using nrutil
  Array2 = imatrix(0,dimension1-1,0,3); // allocates memory to Array2 (dimension1 x 3) elements, using nrutil

  for(ct=0; ct<dimension1; ct++) 
  {
    for(ct2=0; ct2<3; ct2++)
    {
      fscanf(d_Array1, "%lf", &Array1[ct][ct2];
      fscanf(d_Array2, "%d", &Array2[ct][ct2];
    }
  }
  fclose(d_Array1);
  fclose(d_Array2);
}

我在这里错过了错误处理功能,但是我确实有一些错误处理方法……并不是有帮助。 尝试从main函数访问数组时遇到分段错误。

如果有人可以提供帮助,我将非常感激...我看到的是*星级! 谢谢!

那么星数是正确的。

之所以遇到段错误,是因为您没有将指针复制回分配的缓冲区。 您仅初始化f_ReadData:Array1,但需要将此值分配回* Array1ptr。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM