Taille variable pour un tableau.

cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008 - 4 juin 2008 à 21:36
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008 - 5 juin 2008 à 17:42
Bonjour.
J'ai plusieurs tableaux déclarés en "globale" (juste avant le main) et j'aimerai leur allouer une taille variable, comme ceci:

tab1[MAX][300];
tab2[MAX1][300];

De tel façon que l'utilisateur puisse entrer par la suite MAX et MAX1 selon ses besoins.
Or ceci est impossible car il sont déclarés en globale: je doit donc leur allouer un MAX et un MAX1 bien précis avant le main, empechant ainsi l'utilisateur de les changer par la suite.
Bien entendu si j'ai déclaré les tableaux en global c'est que je n'avait pas le choix: si je les déclare juste au debut du main il se passe n'importe quoi dans mon programme, je trouve sa bizzare, vous avez une explication?
Ouvert à toutes propositions^^.
Merci.

5 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 22:11
Salut
Tu ne peux pas contrôler la taille de tes tableaux si ces derniers sont déclarés statiquement. Dans ton cas MAX doit être un define ou un const int.
Ce que tu dois faire, c'est déclarer des pointeurs et passer par l'allocation dynamique.
int **tab; //tableau 2D et des new ou malloc pour l'allocation.

Cherche allocation dynamique sur internet et tu trouveras toutes les réponses.

A+
Mon site internet : http://pistol.petesampras.free.fr
0
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008
4 juin 2008 à 22:25
Merci d'avoir prit le temps de me repondre.
En effet les pointeurs semblent etre la solution à mon probleme^^(les pointeurs sont loin d'etre un reflexe chez moi...ce n'est pas très bien je sais^^).
Encore une chose: je n'ai jamais utilisé de pointeurs tableau, il s'ecrivent ainsi?:
char **tab[MAX][300];
char *tab1[MAX1][300];

et lors de l'utilisation:
**tab[MAX][300];
*tab1[MAX1][300];

???
Merci.
0
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008
4 juin 2008 à 22:27
Pardon je voulait écrire:

char *tab1[300];
et
*tab[5];

Merci.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
4 juin 2008 à 22:40
char tab[300][300]; // 300 zones mémoires de 300 octets chacune
char *tab[300]; // <- TABLEAU DE POINTEURS (300 pointeurs)

Ce que tu veux faire est probablement un pointeur de pointeurs:

char **tab;

J'avais fait une fonction qui allouait la mémoire dynamiquement pour des pointeurs de pointeurs si tu veux y jeter un coup d'oeil:

http://www.codyx.org/snippet_allocateur-pointeur-pointeurs_293.aspx

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008
5 juin 2008 à 17:42
Waou SAKingdom sa c du programme^^.
Proprement codé et efficace bravo!
Combien d'années (de siecles^^) de pratique a tu?
Merci.
0
Rejoignez-nous