Suppression d'une case d'un tableau dynamique

Fermé
caro4991 Messages postés 1 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 17 mai 2009 - 17 mai 2009 à 16:16
 loupius - 17 mai 2009 à 17:15
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]);

}


}
A voir également:

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?
0