2013-02-20 7 views
5

EDIT - può spiegare l'elettore down? Ho una domanda chiara, con prove a sostegno e prove di indagini preliminari. Mi piacerebbe capire perché non mi voti ...?Errore del compilatore: tipi incompatibili quando si assegna a 'struct' da type 'void *' durante malloc


sto ottenendo questo errore quando ho compilare con gcc:

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

Le linee di problema sono:

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

credo di aver seguito il protocollo corretto, come descritto here e anche here. Cosa mi manca?

+1

Sei, per caso, compilando questo come _C++ _? –

+0

Stai compilando come C++? –

+0

A meno che '~ $ gcc program.c' sia' g ++' in Ubuntu ... – d0rmLife

risposta

6

Per un array multidimensionale, si desidera una matrice di tipo 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); 
} 

Ora cells è un array multidimensionale, in cui il primo intervallo indice è la lunghezza e il secondo intervallo dell'indice è la larghezza.

+0

Grande, il compilatore è felice :) Ha senso, grazie per aver spiegato. – d0rmLife

+0

In senso stretto, un array multidimensionale è semplicemente una matrice di matrici.È possibile creare una struttura dati che funzioni come un array multidimensionale (con maggiore flessibilità e maggiore necessità di gestire la propria memoria) utilizzando una serie di puntatori. –

+0

@KeithThompson La struttura di dati alternativa si riferisce a una matrice risultante da un comando simile a: 'struct cell * cells = malloc (sizeof (struct cell) * length * width);'? – d0rmLife