C Programming Leçon - allocation dynamique de mémoire


Ce tutoriel est destiné aux débutants dire la puissance de pointeurs dans la programmation C Ce tutoriel va essayer d'expliquer comment, avec l'aide de pointeur nous pouvons résoudre le problème de la gestion de la mémoire. Si vous ne savez pas Ce pointeur est en C Cliquez ici pour apprendre rapidement.

Nous avons utilisé variable qui nécessite toutes les variables doivent être déclarées avant nous les utilisons. Donc, si nous devons stocker 100 étudiants ne nous roulons alors nous devons déclarer 100 variables entières individu. Ce problème peut être résolu à l'aide de la matrice; Déclaration seul tableau peut stocker plus de 100 valeurs entières. Tableau à une de la plus grande limitation est formé ne peut pas être augmenté ou diminué au cours de l'exécution d'un programme. Pour atteindre cet objectif de mieux envisager le programme suivant la déclaration de C:




roll_no int [100];

Supposons que vous souhaitez stocker roll_no de 100 étudiants (200 bytes de mémoire occupés en raison de la déclaration ci-dessus) et surtout langage économique C fera la même tâche. Lors de l'exécution d'un programme de C Je pensais que je viendrai roll_no seulement 40 étudiants. Cette décision d'entrer roll_no seulement 40 élèves utiliseront 80 octets à 200 octets (2 octets par entier * 40 étudiants) de mémoire et les 120 octets restants de la mémoire sera inutile.

Si nous voulons sauver 150 étudiants roll_no utilisant le même programme, nous ne pouvons pas le faire parce que nous avons déclaré tableau pour stocker seulement 100 étudiants roll_no. Pour surmonter ce problème d'allocation de mémoire, nous devons allouer de la mémoire dynamiquement en fonction des entrées utilisateur. Nous pouvons le faire avec deux fonctions encastrables de c calloc, malloc et un pointeur. Calloc et malloc est deux Fonctions, qui aident à allouer de la mémoire dynamiquement à l'exécution (pendant l'exécution du programme), ce qui peut réduire le gaspillage de problème de mémoire.

C programme pour afficher allocation dynamique de mémoire avec malloc ()

#include #include #include void main () { int non, pt *, i; clrscr (); printf ("Entrez nombre d'étudiants:"); scanf ("% d", et pas); pt = (int *) malloc (pas * 2); if (pt == NULL) { printf ("allocation \ nMemory \ n échoué!"); getch (); exit (0); } printf ("* * * * Entrez rouleaux sans étudiants * * * *. \ n"); for (i = 0; i "); scanf ("% d", (pt + i)); } printf (". \ n * * * * Rouleau entré toute * * * * \ n"); for (i = 0; i allocation dynamique de mémoire avec malloc ()

Explication du code:

Nous creusons le programme ci-dessus; Ce est un exemple simple d'un programme qui utilise c entier pointeur à allouer de la mémoire dynamiquement en fonction utilisateur à l'exécution. Comme je vous l'ai dit plus tôt que nous pouvons faire ce est avec malloc () ou calloc (). Dans cet exemple, je suis en utilisant malloc () et calloc () est la suivante. Pour utiliser la fonction malloc () ou calloc () doit inclure stdlib.h ou alloc.h fichier d'en-tête sinon vous obtiendrez malloc erreur prototype construction. Ligne n. 3 inclut le fichier d'en-tête stdlib.h. Conformément pas. 7 ensemble de pointeur pt et quelques autres entier est déclaré que nous aurons besoin plus tard, en entrée et en boucle. Ligne n. 11 nombre de magasins entier en toute variable qui est utilisé comme le nombre d'étudiants dont le nombre que nous allons à l'entrée. Au rang suivant (Ligne n. 12) est le plus important dans ce programme; il fait tout la répartition du travail. Si la fonction malloc est incapable d'allouer de la mémoire puis retourne l'adresse du morceau de mémoire qui a été allouée sinon retourne NULL.

pt = (int *) malloc (pas * 2);

Comme vous le savez déjà que malloc est une fonction, il nécessite un paramètre ou argument qui est le nombre d'octets à la réserve. Dans notre programme, nous avons fourni aucune * 2 en tant que paramètre. Le pas variable contient le nombre d'étudiants dont l'écriture ne est pas nous allons entrer. Mais parce que nous multiplions sans deux? Voici la réponse, supposons que vous souhaitez stocker le rouleau de 10 étudiants de numéro. Nous avons conservé 10 dans ne importe quelle variable et passé ce pas variable dans malloc. Mais pensez-vous que cela fonctionnera? Pourquoi entier occupe deux octets et nous voulions garder 10 étudiants informations. Et si vous allez de 10 à malloc puis livre compilateur seulement 10 octets peuvent stocker des informations à seulement 5 étudiants. Pour résoudre ce problème, je ne ai pas multiplié par deux, si vous entrez 10, puis se réserve 20 octets de mémoire. Si vous ne vous rappelez pas le type de données occupe la quantité de mémoire que vous pouvez utiliser sizeof () que le retour format du type de données.

pt = (int *) malloc (sizeof pas * (int));

Peu avant malloc () Je ai utilisé (int *), il est appelé Type de fusion (moyens de conversion par un type de données autre type de données compatible). Si l'allocation de mémoire est réussi, malloc () renvoie un pointeur par défaut à un vide et le type lancer ce pointeur entier et stocke l'adresse dans entier variable pointeur pt. Donc pointeur pt contient l'adresse de début de mémoire allouée avec malloc ().

Si, pour une raison quelconque, malloc () ne parvient pas à allouer de la mémoire renvoie NULL. Ligne n. 13-18 fait le même travail, si malloc () ne parvient pas à allouer de la mémoire montrera erreur et quitter le programme.

Aucune ligne 21-25 est utilisé pour prendre le rouleau de élèves de ne pas stocker dans. Regardez la ligne n. 24 et en particulier de (pt + i) la déclaration. Entier pointeur pt contient l'adresse de départ de la mémoire qui est allouée par malloc () et en ajoutant la valeur de la variable nous chargeant de se déplacer plus pour stocker la valeur de la pièce de mémoire. Par exemple, si le pointeur adresse initiale est 1002 alors (pt + 1) signifie 1004 (pt + 2) = 1006, et ainsi de suite.

Ligne n. 28-31 affiche la valeur stockée en mémoire et ce qui est facile.

C programme pour afficher allocation dynamique de mémoire avec calloc ()

#include #include #include void main () { int non, pt *, i; clrscr (); printf ("Entrez nombre d'étudiants:"); scanf ("% d", et pas); pt = (int *) calloc (n, 2); if (pt == NULL) { printf ("allocation \ nMemory \ n échoué!"); getch (); exit (0); } printf ("* * * * Entrez rouleaux sans étudiants * * * *. \ n"); for (i = 0; i "); scanf ("% d", (pt + i)); } printf (". \ n * * * * Rouleau entré toute * * * * \ n"); for (i = 0; i allocation dynamique de mémoire avec calloc ()

Explication du code:

Ci-dessus est le même que ce que nous avons expliqué dans malloc (), la seule différence est qu'ici nous avons utilisé calloc (). Comme vous le savez tous calloc () malloc () fonction fait le même travail, mais calloc () est un peu différent de malloc (). Calloc () prend deux valeurs comme paramètre tout malloc () nécessite un paramètre. Dans la ligne n ° 12 calloc () a deux arguments 10,2. Voici 2 indique que nous voulons stocker valeur entière pour être sûr de bloquer deux octets et 10 indique que nous voulons stocker 10 valeurs entières.

Une différence plus importante entre calloc () et malloc () est que la mémoire allouée par défaut malloc () contient les valeurs de déchets alors que la mémoire allouée par calloc () contient tous à zéro (0). Code reste est expliqué ci-dessus dans malloc explication.

Votre avis

Programmation C Liens connexes

  • Une brève histoire de la langue de C
    Avant de commencer un programme complexe en C, nous devons comprendre ce qui est vraiment C, comment il est venu à l'existence et comment il diffère des autres langues de l'époque. Dans ce tutoriel, je vais essayer de parler de ces ...
  • Les types de données en langage C
    Un langage de programmation vise à aider les programmeurs à développer certains types de données et pour fournir une sortie utile. La tâche de traitement est obtenu en effectuant série de commandes appelées ...
  • Les tableaux en vue de programmation C du programmeur
    Un tableau en langage C est un ensemble de données d'un type similaire, signifie une matrice peut contenir la valeur d'un type de données particulier pour lequel elle est déclarée. Les tableaux peuvent être créés à partir de l'un des types de données C-int ...
  • Comment travailler avec deux tableaux de dimensions dans C
    Nous savons comment travailler avec un tableau (tableau 1D) avec une dimension. En C, vous pouvez avoir plus d'une dimension dans un tableau. Dans ce tutoriel, nous allons apprendre comment nous pouvons utiliser deux ...
  • types de fonction en C Langages de programmation:
    Dans ma précédente programmation tutoriel C Je ai essayé d'expliquer ce que la fonction, ses avantages et la façon de déclarer une fonction C. Et je vous ai dit qu'il ya cinq types de fonctions et sont: ...
  • Quelle est la fonction en langage C?
    Une fonction en langage C est un bloc de code qui effectue une tâche spécifique. Il a un nom et est réutilisable à-dire qu'il peut être exécuté à partir de nombreuses parties différentes dans un programme de C tel que requis. Et aussi ...
  • Comment travailler avec un tableau multidimensionnel en programmation C
    C permet série de deux ou plusieurs dimensions et le nombre maximum de dimension d'un programme C peut avoir dépend du compilateur que nous utilisons. En général, une matrice ayant une dimension est appelée tableau 1D, matrice ...
  • Les pointeurs en C Programming
    Dans ce tutoriel, je vais discuter de ce pointeur est et comment les utiliser dans notre programme C. Beaucoup apprenant de programmation C pense que pointeur est l'une des questions difficiles dans le langage C, mais ce ne est pas ...

(0)
(0)

Commentaires - 0

Sans commentaires

Ajouter un commentaire

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caractères restants: 3000
captcha