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

Je l'avais déclaré sur mon main(). Cependant je veux qu'il soit globalement accessible à toutes les fonctions. Je crois que cela est fait avec realloc et déclarant ceci comme nul ou quelque chose au début du fichier. Est-ce correct?Allocation de mémoire de la structure globale

struct ponto *ps = null; 

puis, quand je sais la taille que j'ai besoin pour le struct des tableaux:

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

Mais cela ne semble pas fonctionner hehe. Des conseils?

+0

Comment avez-vous trouvé que cela ne fonctionne pas? Appeler 'realloc' sur null est équivalent à' malloc'. – khachik

+0

Je viens juste de me rendre compte de ça. – Qosmo

Répondre

1

Rendre globalement ps visible nécessite une variable globale. Vous avez probablement aussi besoin de faire cela pour le nombre de colonnes et de lignes.

struct ponto *ps; 
int colunas, linhas; 

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

maintenant ps est visible à toutes les fonctions du fichier source et à travers elle, ils peuvent accéder à la mémoire il pointe.

Si vous avez plusieurs fichiers source, vous devrez leur parler ps dans un fichier d'en-tête qui déclare

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

realloc effectue une opération tout à fait différent, il redimensionne le tampon ps points. null n'existe pas dans la norme C.

+0

"deux ou plusieurs types de données dans les spécificateurs de déclaration" lorsque je déclare struct ponto * ps; Pourquoi est-ce? – Qosmo

+0

@Queops, avez-vous mis un point-virgule (';') après la déclaration de 'struct ponto'? http://stackoverflow.com/questions/2098973/two-or-more-data-types-in-declaration-specifiers-error –

+0

Je voulais dire, avez-vous inclus un ';' après la déclaration de la structure * type * ' ponto'? (Pas la variable 'ps'.) –

1

Si votre problème est vraiment la portée de la variable, vous pouvez le faire:

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

La valeur "NULL" explicite n'est pas nécessaire. –

+0

Aussi, 'sizeof * ps' serait plus agréable que' sizeof (struct ponto) '. –