2012-10-19 96 views
1

我想初始化一個帶有複雜雙精度的2D動態數組。我無法弄清楚這個錯誤信息告訴我要做什麼,並且無法在任何地方找到它。2D動態數組,填充複數

#include <complex.h> 
... 
int main(int argc, char *argv[]) { 
    complex double **A; 
    FILE *inputFile; 
    int i; 
    double numRow, numCol; 

    inputFile = fopen("input.txt", "r"); 
    fscanf(inputFile, "%lf %lf", &numRow, &numCol); 

    A = ((complex double)**)malloc(numRow * sizeof((complex double)*)); 
    for(i = 0; i < numCol ; i++) { 
     A[i] = ((complex double)*)malloc(NC * sizeof((complex double))); 


    for(i = 0; i < m; ++i) { 
     free(A[i]); 
    } 
    free(A); 

我得到的錯誤來自調用malloc的兩行。

gewhpp.c:58:26: error: expected expression before â)â token 
gewhpp.c:60:29: error: expected expression before â)â token 

回答

2

嘗試編輯線與complex double看起來像這樣:

A = (complex double**)malloc(numRow * sizeof(complex double*)); 

你並不需要括號圍繞「雙重複雜」,然後把「*」

(您有你的大括號有一些其他的錯誤,但我想這是因爲這只是代碼片段...)

+0

最初的編輯是正確的。非常感謝,一直呆在這裏一個小時......我會在幾分鐘內接受答案。 – JuiCe

2
A = ((complex double)**)malloc(numRow * sizeof((complex double)*)); 
for(i = 0; i < numCol ; i++) { 
    A[i] = ((complex double)*)malloc(NC * sizeof((complex double))); 

可以清理到

A = malloc(numRow * sizeof *A); 
if (A) 
{ 
    for (i = 0; i < numCol; i++) 
    { 
    A[i] = malloc(NC * sizeof *A[i]); 
    ... 

更少的機會放置咬你在褶皺。

您不需要在C中輸入malloc的結果(C++是另一回事),您可以將sizeof運算符應用於表達式,而不僅僅是類型名稱。由於*A的類型爲complex double *,因此*A的尺寸與(complex double *)的尺寸相同。