2013-02-20 4 views
5

EDIT - ダウン投票者は説明できますか?私は明確な疑問を持ち、証拠を裏付けており、事前調査の証拠があります。なぜあなたが私の投票に失敗したのか理解したいのですが···?コンパイラエラー:malloc中に 'void *'型から 'struct'に代入する際の互換性のない型


私はgccでコンパイルしたときに、私はこのエラーを取得しています:

error: incompatible types when assigning to type ‘struct cell’ from type ‘void *

問題の行は、次のとおりです。

struct cell* cells = NULL; 
    cells = malloc(sizeof(struct cell) * length); 
    for (i = 0; i < length; i++) { 
      cells[i] = malloc(sizeof(struct cell) * width); 

私が説明するように、私は、適切なプロトコルに従っていると信じてhereおよびhereである。私は何が欠けていますか?多次元配列の場合

+1

あなたは、おそらく、これを_C++ _としてコンパイルしていますか? –

+0

C++としてコンパイルしていますか? –

+0

Ubuntuでは '〜$ gcc program.c'が' g ++ 'でない限り... – d0rmLife

答えて

6

は、あなたが欲しいタイプstruct cell** cellsの配列:今

struct cell** cells = NULL; 
cells = malloc(sizeof(struct cell*) * length); 
for(int i = 0; i < length; i++) { 
    cells[i] = malloc(sizeof(struct cell)*width); 
} 

cellsは、最初のインデックス範囲は長さであり、第二のインデックス範囲は幅である多次元配列、です。

+0

偉大な、コンパイラは幸せです:)説明のために感謝、感謝します。 – d0rmLife

+0

厳密に言えば、多次元配列は単なる配列の配列です。ポインターの配列を使用して、多次元配列のように機能するデータ構造を作成できます(柔軟性が高く、独自のメモリーを管理する必要性が増します)。 –

+0

@KeithThompson 'struct cell * cells = malloc(sizeof(struct cell)* length * width);'のようなコマンドの結果として配列を参照する代替データ構造です。 – d0rmLife

関連する問題