2012-03-11 51 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