2010-11-19 6 views
0
struct ponto *ps = malloc(sizeof(struct ponto) * colunas * linhas); 

Ich hatte dies auf meinem Haupt() deklariert. Ich möchte jedoch, dass es global für alle Funktionen zugänglich ist. Ich glaube, dass dies mit realloc gemacht wird und dies als null oder etwas am Anfang der Datei deklariert. Ist das richtig?Speicherzuweisung der globalen Struktur

struct ponto *ps = null; 

und dann, wenn ich weiß, die Größe, die ich für die Struktur von Arrays muß:

ps = realloc (ps, sizeof(struct ponto) * colunas * linhas); 

Aber dies scheint nicht hehe zu arbeiten. Irgendwelche Tipps?

+0

Wie Sie herausgestellt hat, dass es nicht funktioniert? Der Aufruf von "realloc" auf null entspricht "malloc". – khachik

+0

Yeh Ich habe das gerade erkannt. – Qosmo

Antwort

1

Um global sichtbar zu machen, muss ps eine globale Variable sein. Wahrscheinlich müssen Sie dies auch für die Anzahl der Spalten und Zeilen tun.

struct ponto *ps; 
int colunas, linhas; 

int main() 
{ 
    colunas = /* whatever */; 
    linhas = /* whatever */; 
    ps = malloc(sizeof(struct ponto) * colunas * linhas); 
    /* do other stuff */ 
} 

Jetzt ist ps sichtbar für alle Funktionen in der Quelldatei und durch sie, können sie auf den Speicher zugreifen es verweist.

Wenn Sie mehrere Quelldateien haben, werden Sie sie über ps in einer Header-Datei zu sagen haben, die es

struct ponto { /* whatever */ }; /* define the struct in the header */ 
extern struct ponto *ps; 
extern int colunas, linhas; 

realloc führt eine ganz andere Operation erklärt, es ändert die Größe der Puffer ps Punkte. null existiert nicht in der Standard-C

+0

"zwei oder mehr Datentypen in Deklarationsbezeichnern", wenn ich struct ponto * ps deklariere; Warum ist das? – Qosmo

+0

@Queops, haben Sie nach der Deklaration von 'struct ponto' ein Semikolon ('; ') gesetzt? http://stackoverflow.com/questions/2098973/two-or-mor-data-types-in-declaration-specifiers-error –

+0

Ich meinte, haben Sie ein '' 'nach der Deklaration des * type *' struct ponto'? (Nicht die Variable 'ps'.) –

1

Wenn Ihr Problem wirklich nur der Umfang der Variablen ist, können Sie dies tun:

struct ponto *ps = NULL; 
... 
int main() 
{ 
    ps = malloc(sizeof(struct ponto) * colunas * linhas); 
    ... 
} 
+0

Der explizite 'NULL' ist nicht notwendig. –

+0

Auch 'sizeof * ps' wäre schöner als' sizeof (struct ponto) '. –