2016-01-16 28 views
1

我有一個結構,看起來像這樣:訪問一個靈活的陣列成員用C

typedef struct TestCase TestCase; 
typedef struct TestCase { 
    char * userName; 
    TestCase *c[]; // flexible array member 
} TestCase; 

而在另一個文件中,我嘗試設置靈活數組成員爲NULL,但這似乎沒有不工作(我不能改變它是如何被定義)

void readIn(FILE * file, TestCase ** t) { 
    *t = malloc(sizeof(TestCase)); 

    (*t)->c = NULL; //gives the error 

} 

我使用雙指針,因爲那正是我指定了(這是不是整個代碼,而只是一個snipit)。 (因爲後面還有代碼來釋放分配的變量)。

任何幫助將不勝感激。

+1

你會得到什麼錯誤? –

+0

「靈活數組成員使用無效」 – Geded

+0

請參閱http://stackoverflow.com/questions/28718198/how-to-access-array-of-flexible-arrays-in-cache-friendly-manner – zangw

回答

5

看看這行:

(*t)->c = NULL; 

這試圖分配NULL到一個數組,這是不允許的。這就像寫這樣的:

int array[137]; 
array = NULL; // Not allowed 

當你有一個靈活的陣列成員,其目的是,當你malloc內存爲對象,你overallocate的內存,你需要騰出空間給數組元素。例如,該代碼

*t = malloc(sizeof(TestCase) + numArrayElems * sizeof(TestCase*)); 

將分配一個新TestCase其具有numArrayElems指針的數組。如果你事先不知道需要多少指針,那麼你可能應該改用靈活的數組成員,而只是使用普通的指針。