Essayons d'aborder cette question en considérant différents aspects.
Taille
malloc
vous permet d'allouer des espaces mémoire beaucoup plus grands que ceux alloués simplement en utilisant student p;
o int x[n];
. La raison étant malloc
alloue l'espace sur le tas tandis que l'autre l'alloue sur la pile.
Le langage de programmation C gère la mémoire de manière statique, automatique ou dynamique. Les variables à durée statique sont allouées dans la mémoire principale, généralement avec le code exécutable du programme, et persistent pendant toute la durée de vie du programme ; les variables à durée automatique sont allouées sur la pile et vont et viennent au gré des appels et retours de fonctions. Pour les variables à durée statique et automatique, la taille de l'allocation doit être constante au moment de la compilation (sauf dans le cas des tableaux automatiques à longueur variable [5]). Si la taille requise n'est pas connue avant l'exécution (par exemple, si des données de taille arbitraire sont lues depuis l'utilisateur ou depuis un fichier sur disque), l'utilisation d'objets de données de taille fixe est inadéquate. ( de Wikipedia )
Portée
Normalement, les variables déclarées devraient être supprimées/libérées après le bloc dans lequel elles sont déclarées (elles sont déclarées sur la pile). D'autre part, les variables dont la mémoire est allouée à l'aide de la fonction malloc
restent jusqu'à ce qu'ils soient libérés manuellement.
Cela signifie également qu'il n'est pas possible de créer une variable/un tableau/une structure dans une fonction et de renvoyer son adresse (car la mémoire vers laquelle elle pointe pourrait être libérée). Le compilateur essaie également de vous avertir à ce sujet en donnant l'avertissement suivant :
Avertissement - l'adresse de la mémoire de la pile associée à la variable locale 'matches' est retournée.
Pour plus de détails, lisez ceci .
Modification de la taille ( realloc
)
Comme vous l'avez peut-être deviné, ce n'est pas possible par la voie normale.
Détection des erreurs
Dans le cas où la mémoire ne peut pas être allouée : la méthode normale peut provoquer l'arrêt de votre programme alors que malloc
retournera un NULL
qui peuvent facilement être capturés et traités dans votre programme.
Modifier le contenu de la chaîne à l'avenir
Si vous créez le stockage d'une chaîne comme char *some_memory = "Hello World";
vous ne pouvez pas faire some_memory[0] = 'h';
car elle est stockée en tant que constante de chaîne et la mémoire dans laquelle elle est stockée est en lecture seule. Si vous utilisez plutôt malloc, vous pouvez modifier le contenu ultérieurement. Pour plus d'informations, vérifier cette réponse .
Pour plus de détails sur les tableaux à taille variable, consultez le site Web de la Commission européenne. regardez ceci .
4 votes
Lisez un bon livre de programmation en C. Il expliquera la mémoire allouée par le tas bien mieux et plus rapidement que je ne peux le faire en quelques minutes.
3 votes
Vous devez apprendre les différences entre la mémoire de tas et la mémoire de pile, consultez cette question : stackoverflow.com/questions/79923/
5 votes
N'oubliez pas d'appeler
free
aprèsmalloc
/calloc
etc...