Chaine de caractères et désallocation !!

flopflopp Messages postés 14 Date d'inscription dimanche 8 février 2004 Statut Membre Dernière intervention 23 mars 2007 - 2 nov. 2004 à 13:13
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 nov. 2004 à 14:49
Bonjour,

J'ai un problème de libération de mémoire sur un chaine de caractère.
En effet j'au une chaine de caractère représentant une ligne de texte définit de la façon suivante :

#define LGMAX 20

struct ligne{
char* tLigne;
};

struct ligne nouvLigne;

//Creation d'une nouvelle ligne

void creation_L()
{
nouvLigne.tLigne=(char*)calloc(LGMAX,sizeof(char));
if(nouvLigne.tLigne==NULL)
{
printf("Erreur d'allocation memoire");
exit(1);
}
}

la fonction de création me permet d'allouer l'espace pour la ligne de texte (je suis en train de créer un editeur de texte très simple style vi).

J'ai aussi une fonction de destruction de la ligne :

void destruction_L()
{
free(nouvLigne.tLigne);
nouvLigne.tLigne=NULL;
}

Maintenant ce que je voudrais faire c'est supprimer un groupe de caractère donné à parir de sa position de début et de sa taille.

Il n'y a pas de problème pour déplacer les caractères cependant je n'arrive pas à désalouer l'espace correspondant aux caractères supprimés car le free ne veut pas marcher sur un seul caractère.
Pourriez vous m'indiquer comment je dois faire !!

Merci beaucoup !

Le code de ma fonction est le suivant :

char* supprGp(int posDebut, int taille)
{
int i,j;
for(i=posDebut;i<=taille+posDebut;i++)
nouvLigne.tLigne[i]=nouvLigne.tLigne[i+taille];
for(j=posDebut+taille+1;j<=posDebut+taille*2;j++){
[b]free(nouvLigne.tLigne[j]); //C'est ici que je ne trouve pas koi mettre !! [\b]
nouvLigne.tLigne[j]=NULL;
}
return(nouvLigne.tLigne);
}

1 réponse

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 nov. 2004 à 14:49
Je pense que tu dois utiliser realloc avec la nouvelle taille, a condition que la mémoire que tu veux libérer soit a la fin du bloc alloué
0
Rejoignez-nous