L'attribution de mémoire à double pointeur?

Je vais avoir du mal à comprendre comment attribuer de la mémoire
pour un double pointeur.
Je veux lire un tableau de chaînes et de les stocker.

    char **ptr;
    fp = fopen("file.txt","r");
    ptr = (char**)malloc(sizeof(char*)*50);
    for(int i=0; i<20; i++)
    {
       ptr[i] = (char*)malloc(sizeof(char)*50);
       fgets(ptr[i],50,fp);
    }

au lieu de ce que je viens juste d'attribuer un grand bloc de mémoire et
magasin de la chaîne

  char **ptr;
  ptr = (char**)malloc(sizeof(char)*50*50);

où serait le mal? Et si oui, pourquoi est-il?

Ne pas l'appeler "double pointeur" - cela vous arrive sur le mauvais pied mentalement - c'est un pointeur vers un pointeur.

OriginalL'auteur lazy_hack | 2010-02-13