Une erreur s'est glissée dans mon destroy ... il ne faut pas oublier de libérer chaque chaine!
for(i=0;i<0;i++)
free(t->table[i]);
Désolé !
Type: Messages; Utilisateur: kwariz
Une erreur s'est glissée dans mon destroy ... il ne faut pas oublier de libérer chaque chaine!
for(i=0;i<0;i++)
free(t->table[i]);
Désolé !
Si on reprend ta structure :
typedef struct
{
char **table;
int len;
} tab;
void ajouter(tab *tableau, char *ligne)
{
tableau->table[tableau->len] = malloc((strlen(ligne)+1) * sizeof(char)); /* Allocation mémoire */
strcpy(tableau->table[tableau->len], ligne);
...
Il ne faut faire un free que si tu as fait un malloc avant (ou pour certaines fonctions qui le font pour toi comme strdup).
Faire un free sur un espace mémoire non alloué n'est pas une bonne idée....
Où et quand l'as-tu alloué ?
strlen ne compte pas le '\0', mais tu dois allouer de l'espace pour lui car strcpy l'utilises, d'où le +1 pour lui réserver de la place.
strdup fait le boulot pour toi ;)
plus secure -> utilise...
Deux erreurs en gras :
la première tu oublies le 0 terminal (classique :)) La chaine "bonjour" est de longueur 7 mais prend 8 octets {'b','o','n','j','o','u','r',0} -> il faut toujours réserver...
Hum, je pense que tu te représentes mal les choses. Un tab a une longueur constante la taille d'un entier plus la taille d'un pointeur ; len est bien le nombre de chaine contenue dans table.
À moins...
Salut,
partons de ta structure :
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
typedef struct tab
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.