Portée de variable

[Résolu]
Signaler
Messages postés
70
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Messages postés
70
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008
-
Bonjour, comment peut-on déclarer une variable globale à l'intérieur d'une fonction ???

Je m'explique, voici mon code (très simplifié) :

void initialisation ()
{
int nb_prog;
... // Définition de l'entier de nb_prog
char* chaine[(nb_prog - 1)];
...
}

et j'aimerais que la variable (tableau) "chaine" soit accessible dans d'autres fonctions.Le problème c'est que cette variable dépend de celle d'avant.

Comment faire ? svp

6 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
chaine = malloc(sizeof char* * (nb_prog - 1));
...
free(chaine);
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
char* chaine[(nb_prog - 1)];

Déja tu n'a pas le droit d'écrire ca (même si gcc l'accepte). Considère que la taille d'un tableau doit être une constante. Voila comment tu peux faire:

char** chaine;

void initialisation ()
{
int nb_prog;
... // Définition de l'entier de nb_prog
chaine = new char*[nb_prog - 1];
...
}
Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

En supplément de ce que Vecchio56 a dit pense a bien libérer la mémoire allouée par le new a l'aide de l'opérateur delete[] . Cette opération est souvent négligée bien que très importante.

Voila, bon codage.

Mess with the best, die like the rest
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
En gros, une variable globale doit toujours être déclaré à l'extérieure de toute fonction et généralement, au début de ton code. Ainsi, cette variable ne sera éffacé qu'a la fin du programme et non à la fin de la fonction et toute donné qu'elle contient peut être utiliser ou redéfinie par toute fonction l'utilisant
Messages postés
70
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008

Le problème c'est que je programme en C et non en C++, donc je peux pas utiliser new ... delete !

Je crois que l'on peut utiliser malloc ... free mais comme je suis débutant je sais pas trop comment faire !

Si qqn pouvait m'aider .. ?
Messages postés
70
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
1 février 2008

Merci, ça marche très bien maintenant ...