2012-03-11 49 views
0

all。我已经尝试过,并试图让我的头脑在这附近,并感觉我几乎在那里,但我很困惑有多少'*'我需要!我有一个函数,它将包含数据文件,int和指向两个未初始化的二维数组的指针的字符串作为输入。该函数读取数据文件,然后分配内存并相应地填充数组。将未初始化的二维数组作为参数传递给C

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

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); 
} 

我已经错过了的错误处理,但我确实有一些的,在地方...不是它帮助。当我尝试从主函数访问数组时,我遇到了分段错误。

如果有人可以帮忙,我会很感激......我看到*星星!谢谢!

回答

0

然后星星的数量是正确的。

您正在收到段错误,因为您不会将指针复制回您分配的缓冲区。您只初始化f_ReadData:Array1,但您需要将此值分配回* Array1ptr。

+0

对不起 - 我忘了复制行“Array1ptr =&Array1;”和“Array2ptr =&Array2;”到f_ReadData(他们在我的真实,更长的代码),但我仍然有一个分段错误 - 也许这些行包含错误? – JennieEnglish 2012-03-11 23:20:14

+0

是的,正是这些行包含错误。另一个董事会的人善意地指出我的愚蠢。 :-)当然,它应该是'* Array1ptr = Array1;'等。谢谢你的帮助! – JennieEnglish 2012-03-12 03:46:00