Suppression d'une case d'un tableau dynamique

caro4991 Messages postés 1 Statut Membre -  
 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]);

}


}
A voir également:

1 réponse

loupius
 
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