• [^] # Re: Réponses

    Posté par . En réponse au message valeur NULL d'un tableau de pointeur. Évalué à 1.

    if(n != 0) {
    text = realloc(text, (sizeof(char*)*(n+1))); }
    ptr = strchr(line, '\n');
    *ptr = '0円';
    text[n] = malloc(sizeof(char*)*strlen(line)+1);
    strcpy(text[n], line);
    n++;
    }
    Vu le coût d'un realloc(), il vaut mieux l'utiliser pour doubler la taille du tableau à chaque appel (pseudo-code non testé) :
    size_t capacity = 1;
    size_t n = 0;
    char **text = malloc (capacity * sizeof(char*));
    char *ligne = NULL;
    if (text == NULL)
    {
     return NULL;
    }
    while (lire_ligne(ligne, file) != NULL)
    {
     if (n == capacity)
     {
     char **tmp = NULL;
     capacity *= 2;
     tmp = realloc(text, capacity * sizeof(char*));
     if (tmp == NULL)
     {
     /* free(text) et tout ce qui précède */
     return NULL;
     }
     text = tmp;
     }
     text[n] = ligne;
     n++;
    }
    Où la fonction lire_ligne est un wrapper autour de fgets() qui ne tronque pas les lignes (cf. https://linuxfr.org/comments/713347.html#713347 pour un de mes messages à ce sujet). De plus, comme dans mon pseudo-code, il faut tester le retour de realloc(), pour éviter les fuites de mémoire.