Suppression d'une case d'un tableau dynamique
caro4991
Messages postés
1
Statut
Membre
-
loupius -
loupius -
Bonjour,
Je voudrais enlever une case précise d'un tableau dynamique avec la fonction realloc. J'ai fais un programme mais il me renvoie mon tableau en entier.
Voici mon programme, merci:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i;
void * calloc (size_t n, size_t t);
void * realloc ( void * tablettres , size_t t );
int*tablettres;
tablettres= calloc ( 6, sizeof(int) );
tablettres[0]=1;
tablettres[1]=2;
tablettres[2]=3;
tablettres[3]=4;
tablettres[4]=5;
tablettres[5]=6;
tablettres = realloc (tablettres,5) ;
for (i=0 ; i<6 ;i++) {
printf(" tablettres[%d] = %d \n" , i, tablettres[i]);
}
}
Je voudrais enlever une case précise d'un tableau dynamique avec la fonction realloc. J'ai fais un programme mais il me renvoie mon tableau en entier.
Voici mon programme, merci:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i;
void * calloc (size_t n, size_t t);
void * realloc ( void * tablettres , size_t t );
int*tablettres;
tablettres= calloc ( 6, sizeof(int) );
tablettres[0]=1;
tablettres[1]=2;
tablettres[2]=3;
tablettres[3]=4;
tablettres[4]=5;
tablettres[5]=6;
tablettres = realloc (tablettres,5) ;
for (i=0 ; i<6 ;i++) {
printf(" tablettres[%d] = %d \n" , i, tablettres[i]);
}
}
A voir également:
- Suppression d'une case d'un tableau dynamique
- Tableau word - Guide
- Tableau croisé dynamique - Guide
- Forcer la suppression d'un fichier - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Trier un tableau excel - Guide
1 réponse
Oh là là, que d'erreur !!!
void * calloc (size_t n, size_t t);
void * realloc ( void * tablettres , size_t t );
Ceci est apparemment exact, mais 'size_t t' n'a pas la même signification dans les 2 cas.
void* calloc (size_t nbreElements, size_t taille1element);
void* realloc ( void* ancienBloc , size_t nouvelleTailleBloc);
Donc ici tu dois écrire:
tablettres = realloc (tablettres, 5*sizeof(int));
for (i=0 ; i<6 ;i++) na pas de sens: tu dois t'arrêter à '<5' si le 6ème caractère est le même que précédemment, il ne faut pas en tirer la conclusion que 'realloc' n'a rien changé; en vérité réalloc n'a probablement pas changé le pointeur de place (inutile d'allouer un autre emplacement mémoire et de recopier le contenu, le compilateur optimise! il ne faut pas l'oublier), mais il a libéré le 6ème octet qui , plus tard, sera probablement réutilisé.
Bonne continuation?
void * calloc (size_t n, size_t t);
void * realloc ( void * tablettres , size_t t );
Ceci est apparemment exact, mais 'size_t t' n'a pas la même signification dans les 2 cas.
void* calloc (size_t nbreElements, size_t taille1element);
void* realloc ( void* ancienBloc , size_t nouvelleTailleBloc);
Donc ici tu dois écrire:
tablettres = realloc (tablettres, 5*sizeof(int));
for (i=0 ; i<6 ;i++) na pas de sens: tu dois t'arrêter à '<5' si le 6ème caractère est le même que précédemment, il ne faut pas en tirer la conclusion que 'realloc' n'a rien changé; en vérité réalloc n'a probablement pas changé le pointeur de place (inutile d'allouer un autre emplacement mémoire et de recopier le contenu, le compilateur optimise! il ne faut pas l'oublier), mais il a libéré le 6ème octet qui , plus tard, sera probablement réutilisé.
Bonne continuation?