2016-07-24 11 views
0

同じデータ型のポインタ(つまりstruct map)を格納する構造体内に配列を配置したいと考えています。私はStackOverflowの上で見て、これが見つかりました:Cの構造体struct内のポインタの配列を宣言できません

struct map { 
    int city; 
    struct map **link = (struct map *)malloc(204800 * sizeof(struct map *)); 
} 

をしかし、私はこのエラーを取得しています: -

error: expected ':', ',', ';', '}' or '__attribute__' before '=' token  
    struct map **link = (struct map *)malloc(204800*sizeof(struct map *)); 
+0

mallocの結果をキャストすべきではありません:http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc#605858 – SurvivalMachine

+0

正確に何を達成しようとしていますか? –

答えて

5

これは、構造体の定義である、あなたが宣言内の任意の関数ををmallocまたは使用することはできません、宣言理由実行されませんが、それは型マップの型をどのように見えるかのようなテンプレートの一種にすぎません。コンパイラは、そのインスタンスを作成するときにどれくらいのメモリをstruct mapに割り当てるべきかを知ります。

struct map内のメンバーを使用したい場合(ポインタリンクをいくつかの実行可能なメモリセグメントにするなど)、 'map'のインスタンスをどこかに作成する必要があり、その場合にのみmallocを呼び出すことができます。結果のメモリセグメントへのリンクポイントを作成します。

最初にそうような構造体を宣言され、これを修正する方法:

struct map{ 
int city; 
struct map **link; 
}; 

を、あなたがメインで、構造体のインスタンスを作成するときに、あなたがそうのようなリンクのためのスペースを割り当てることができます。

int main() 
{ 
    struct map *temp = malloc(sizeof(struct map)); 
    temp->link = malloc(204800*sizeof(struct map *)); 
    return 0; 
} 
関連する問題