2013-02-20 8 views
5

EDIT - kann der Downvoter erklären? Ich habe eine klare Frage, mit unterstützenden Beweisen und dem Nachweis früherer Ermittlungen. Ich würde gerne verstehen, warum du mich wählst ...?Compiler-Fehler: inkompatible Typen beim Zuweisen zu 'struct' vom Typ 'void *' während malloc


Ich erhalte diese Störung, wenn ich mit gcc kompilieren:

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

Die Problemlinien sind:

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

Ich glaube, ich habe das richtige Protokoll gefolgt, wie beschrieben here und auch here. Was vermisse ich?

+1

Sind Sie zufällig, dies als _C++ _ kompilieren? –

+0

Übersetzen Sie als C++? –

+0

Es sei denn, '~ $ gcc program.c' ist' g ++ 'in Ubuntu ... – d0rmLife

Antwort

6

Für ein mehrdimensionales Array, möchten Sie ein Array vom Typ 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); 
} 

Jetzt cells ist ein mehrdimensionales Array, in dem der erste Indexbereich der Länge und der zweite Indexbereich die Breite ist.

+0

Toll, der Compiler ist glücklich :) Sinn macht, danke für die Erklärung. – d0rmLife

+0

Streng genommen ist ein mehrdimensionales Array einfach ein Array von Arrays.Sie können eine Datenstruktur erstellen, die sich wie ein mehrdimensionales Array verhält (mit mehr Flexibilität und mehr Notwendigkeit, Ihren eigenen Speicher zu verwalten), indem Sie ein Array von Zeigern verwenden. –

+0

@KeithThompson Ist die alternative Datenstruktur, die Sie auf ein Array beziehen, das aus einem Befehl wie folgt resultieren würde: 'struct cell * cells = malloc (sizeof (struct cell) * length * width);'? – d0rmLife

Verwandte Themen