Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question allocation dynamique

    5 décembre 2019 à 6:15:03

    Bonjour, petite question par rapport à ceci (extrait du cours);
    long lireLong()
    {
        char nombreTexte[100] = {0}; // 100 cases devraient suffire
     
        if (lire(nombreTexte, 100))
        {
            // Si lecture du texte ok, convertir le nombre en long et le retourner
            return strtol(nombreTexte, NULL, 10);
        }
        else
        {
            // Si problème de lecture, renvoyer 0
            return 0;
        }
    }
    Pour éviter de creer plusieurs tableaux sans forcément les utiliser, j'ai essayé d'appliquer les notions vues dans le chapitre allocation dynamique:
    int fgetsPInt() {
    	char* nombreTexte = NULL;
    	int i;
    	nombreTexte = malloc(100 * sizeof(char));
    	if (fgetsP(nombreTexte, 100)) {
    		i = atoi(nombreTexte);
    		free(nombreTexte);
    		return i;
    	}
    	else
    		return 0;
    }
    
    Cela fonctionne, mais est-ce "propre" de faire ainsi?
    • Partager sur Facebook
    • Partager sur Twitter
      5 décembre 2019 à 15:06:16

      Salut. sizeof(char) vaut toujours 1, donc tu peux juste écrire malloc(100). Par contre je ne vois pas en quoi ça évite de "gaspiller" de la mémoire. Ce n'est pas vraiment mauvais mais ça ne sert pas à grand chose, de plus réserver 100 octets avec malloc va en réalité utiliser bien plus de mémoire que les 100 octets demandés.
      • Partager sur Facebook
      • Partager sur Twitter
        8 décembre 2019 à 3:08:19

        Salut,
        C'est vrai que sizeof(char) vaut 1 mais c'est plus clair comme cela.
        Comme l'a dit kulturman, ça coûte plus cher en mémoire par malloc si l'espace réservé est toujours le même.
        Si cela s'exécute très souvent, cela coûte également plus de temps de processeur.
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          8 décembre 2019 à 11:29:22

          Utiliser l'allocation dynamique serait intéressant si le nombre d'éléments du tableau était donné par une variable : ainsi on pourrait allouer exactement la place nécessaire. Ici, en faisant un 'malloc' de 100 éléments, on a le même problème qu'avec un tableau de 100 éléments : on risque d'utiliser plus de mémoire que nécessaire.
          • Partager sur Facebook
          • Partager sur Twitter
            9 décembre 2019 à 9:01:58

            PierrotLeFou a écrit:

            Salut,
            C'est vrai que sizeof(char) vaut 1 mais c'est plus clair comme cela.

            Non ce n'est pas plus clair puisqu'on sait que malloc alloue exactement en octet ce qui est demandé, donc tu surcharges la lecture du code avec une multiplication inutile qui sera en plus retiré par le compilateur.

            Je ne comprends pas non plus le concept d'allouer dynamiquement une taille que visiblement... tu connais à la compilation : 100. Autant rester sur un tableau statique. D'autant plus que ce tableau tu ne t'en sers que dans la fonction, quel intérêt ?

            • Partager sur Facebook
            • Partager sur Twitter

            git is great because Linus did it, mercurial is better because he didn't.

            Question allocation dynamique

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown