Modifier la taille d'un tableau dynamique au seins d'un pgm
salut tt le monde
je souhaite créer un tableau dont le nombre de cases n'est pas connu au depart:
solution: Pointeur sans doute
alors j'ai fait:
Code:
1 2
| typedef int *ptr_int;
ptr_int tab; |
je suppose qu'au depart je n'ai besoin que d'une seule case :
Code:
tab=malloc(1*sizeof(int));
je souhaitrerai augmenter la taille de tab chaque fois que l'utilisateur veut saisir d'autres valeurs:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| int n=0;
while(c!=2)
{
printf(" entrer une valeur");
scanf("%d",&tab[n]);
n++;
printf("Ajouter d'autre valeur ? 1:Oui 2:Non");
scanf("%d",&c);
if (c==1)
{
// si oui :je demande plus d'espace memoire pour l'utilisateur
tab=malloc(n+1*sizeof(int));
}
} |
apres la saisie, et quand j'affiche le contenu de tab je trouve que quelques valeurs que j'ai introduit ont été modifiées.
aidez moi pour augmenter la taille du tableau sans rencontrer ce genre d'erreurs.
Merci.
Re: Modifier la taille d'un tableau dynamique au seins d'un
Citation:
Envoyé par Amine_sas
je souhaite créer un tableau dont le nombre de cases n'est pas connu au depart:
solution: Pointeur sans doute
alors j'ai fait:
Code:
1 2
| typedef int *ptr_int;
ptr_int tab; |
Compliqué et confusant. Il suffit d'utiliser int *. Tout le monde comprend.
Citation:
je suppose qu'au depart je n'ai besoin que d'une seule case :
Code:
tab=malloc(1*sizeof(int));
oui, ou :
Code:
int *tab = malloc (sizeof *tab * 1); /* '* 1' est facultatif */
ne pas oublier que malloc() peut échouer. Avant toute utilisation, tester le pointeur 'tab'. Si il vaut NULL, l'allocation n'a pas réussi.
Citation:
je souhaitrerai augmenter la taille de tab chaque fois que l'utilisateur veut saisir d'autres valeurs:
Tel que tu es parti, realloc().
Citation:
Code:
1 2 3 4 5
| int n=0;
while(c!=2)
{
printf(" entrer une valeur");
scanf("%d",&tab[n]); |
Fonction difficile à utiiser correctement (ici, il manque un test de la valeur retournée et un vidage de stdin en cas d'erreur). Préférer fgets() + strtol(), par exemple.
Citation:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
n++;
printf("Ajouter d'autre valeur ? 1:Oui 2:Non");
scanf("%d",&c);
if (c==1)
{
// si oui :je demande plus d'espace memoire pour l'utilisateur
tab=malloc(n+1*sizeof(int));
}
} |
apres la saisie, et quand j'affiche le contenu de tab je trouve que quelques valeurs que j'ai introduit ont été modifiées.
aidez moi pour augmenter la taille du tableau sans rencontrer ce genre d'erreurs.
En utilisant correctement realloc()
Un peu de lecture :
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers
http://emmanuel-delahaye.developpez....tes.htm#malloc
http://emmanuel-delahaye.developpez....es.htm#realloc