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

在C中作为参数传递未初始化的2D数组,c,arrays,function,pass-by-reference,C,Arrays,Function,Pass By Reference,全部。我试着试着让我的头绕过这个,感觉我就快到了,但我对我需要多少“*”感到困惑!我有一个函数,它将包含一个数据文件、一个int和指向两个未初始化的二维数组的指针的目录字符串作为输入。函数读取数据文件,然后分配内存并相应地填充数组 我知道,这个代码是完全错误的,但想法是: void main() { double **Array1; int **Array2; int dimension1; char DirWork[100], buff[100]; f_ReadData(

全部。我试着试着让我的头绕过这个,感觉我就快到了,但我对我需要多少“*”感到困惑!我有一个函数,它将包含一个数据文件、一个int和指向两个未初始化的二维数组的指针的目录字符串作为输入。函数读取数据文件,然后分配内存并相应地填充数组

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

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(字符*DirWork,整数维1,双***数组1ptr,整数***数组2ptr)
{
int-ct,ct2;
双**Array1=*Array1ptr;
int**Array2=*Array2ptr;
char FullDirArray1[100],FullDirArray2[100];
文件*d_阵列1,*d_阵列2;
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_阵列1、%d、&d维度1);
Array1=dmatrix(0,维度1-1,0,3);//使用nrutil将内存分配给Array1(维度1 x 3)元素
Array2=imatrix(0,维度1-1,0,3);//使用nrutil将内存分配给Array2(维度1 x 3)元素

对于(ct=0;ct,则恒星数是正确的


由于没有将指针复制回分配的缓冲区,因此您得到了SEGFULT。您只初始化了f_ReadData:Array1,但需要将此值分配回*Array1ptr。

抱歉-我忘了将“Array1ptr=&Array1;”和“Array2ptr=&Array2;”这两行中的内容复制到f_ReadData(它们在我的实际代码中更长),但我仍然有一个分段错误-可能这些行包含错误??是的,正是这些行包含错误。另一个板上的人善意地指出了我的愚蠢之处。:-)当然,应该是
*Array1ptr=Array1;
等。感谢您的帮助!
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);
}