COM FER FUNCIÓ MALLOC A C.

How Use Malloc Function C



Malloc és una funció integrada declarada al fitxer de capçalera. Malloc és el nom curt de 'assignació de memòria' i s'utilitza per assignar dinàmicament un bloc gran de memòria contigua segons la mida especificada. Hi ha dos tipus d’assignació de memòria estàtica i dinàmica. L’assignació de memòria estàtica es fa en temps de compilació i no canvia en temps d’execució. L'assignació dinàmica de memòria assigna memòria en temps d'execució per a això; fem servir malloc. Ara el punt és on prové d’aquesta memòria, de manera que tots els requisits dinàmics en C es compleixen des de la memòria dinàmica. Bàsicament, la nostra aplicació / programa tindrà 3 tipus de memòria

  • La memòria de pila és local per a tots els mètodes i, quan torna el mètode, la pila l’esborra automàticament.
  • L’àrea de memòria global assigna memòria a totes les variables globals. Aquesta àrea de memòria es crea al començament del programa i, al final, neteja automàticament l'àrea de memòria.
  • La memòria Heap sempre compleix tots els requisits dinàmics del programa / aplicació. Sempre que farem servir la funció malloc, prendrà una mica de memòria del munt i ens en donarà el punter.

Sintaxi:







La sintaxi de malloc és (void *) malloc (size_t size). Per tant, la sintaxi diu que malloc requereix una mida, retornarà el punter bàsicament un punter buit i la mida t es defineix com un enter sense signar. La funció Malloc simplement assigna un bloc de memòria segons la mida especificada a l’emmagatzematge dinàmic, tal com es pot veure a la sintaxi que cal especificar la mida i, en cas d’èxit, retorna un punter que apunta al primer byte de la memòria assignada; . Per tant, la feina de malloc és assignar memòria en temps d'execució.



Per què anul·lar el punter:

Malloc no té una idea de què apunta; simplement vol dir que no sap quines dades emmagatzemaran en aquesta ubicació de memòria. Simplement assigna la memòria sol·licitada per l’usuari sense conèixer el tipus de dades que s’han d’emmagatzemar a la memòria. Per això, torna un punter buit.



Malloc acaba d’assignar memòria després que sigui responsabilitat de l’usuari escriure-la a un tipus adequat perquè es pugui utilitzar correctament al programa. El punter buit és un punter que pot apuntar qualsevol tipus de dades malloc retorna el punter buit perquè no sap quin tipus de dades s’emmagatzemaran dins d’aquesta memòria.





Aquí estem demanant a malloc que assigni 6 bytes de memòria ara si un malloc amb èxit retornarà un punter buit. En aquest cas, l’hem de tipografiar a un punter de tipus enter perquè volem emmagatzemar un enter en aquesta memòria. Aquí malloc assigna 6 bytes de memòria en un munt, i l'adreça del primer byte s'emmagatzema al punter ptr.



Exemple de programa:

Aquí teniu un exemple senzill de programa per entendre el concepte de malloc d’una manera adequada.

Aquí podeu veure amb la funció printf que estic demanant a l'usuari que introdueixi el nombre de enters. Hem declarat dues variables per sobre de i i n. La variable n és el lloc on emmagatzemarem el número introduït per l’usuari. Després d'això, tenim la funció malloc; volem que malloc assigni l’equivalent de mida a la mida de n enters. Estem multiplicant la mida si int amb n; això ens donarà la mida de n enters. Després d'això, malloc retornarà un punter buit i l'estem tipificant a un punter enter i emmagatzemem l'adreça dins del punter ptr. La tipografia és important ja que és una bona pràctica.

Ara, si el punter conté NULL, vol dir que la memòria no està disponible. Així, simplement sortirem del programa amb l’estat de fallada de sortida. Si no és així, podem executar el bucle fàcilment.

El bucle s’executarà de 0 a n-1 i demanarem a l’usuari que cada vegada introdueixi un enter un per un. Dins de la funció scanf, hi ha una cosa escrita ptr + i, ja que sabem que ptr conté l'adreça del primer byte de memòria. Diguem que l'adreça és 1000 aquí i inicialment és igual a zero, de manera que 1000 + 0 és 1000, de manera que dins d'aquesta adreça s'emmagatzemarà el nostre primer enter i després, quan sigui 1, 1000 + 1 que s'hagi interpretat internament com (1000) +1 * 4 si suposo que la mida de l'enter és de 4 bytes i seria igual a 1004, de manera que el següent enter s'emmagatzemarà dins de la ubicació 1004. I això continuarà d'aquesta manera, les adreces són com 1000, 1004, 1008, etc. No estem utilitzant signe ampersand abans de ptr + i perquè ptr ja ens proporciona l'adreça quan escrivim ptr, que és simplement un punter, i conté l'adreça, no el valor, de manera que no hi ha cap requisit per posar-hi ampersand i aquest concepte hauria de ser clar.

En aquest bucle, simplement estem fent una cosa: estem imprimint tots els enters a la pantalla; òbviament, estem utilitzant ptr + i, però aquí, en aquest cas, la desferenciem perquè ptr + i representa una adreça, per tant, hem de desfer-la. Si és igual a 0, serà 1000 perquè suposem que la primera adreça serà 1000, de manera que la desferenciem; obtindrem el primer enter llavors i igual a 1, i passarà a ser 1001, però s’interpretarà com a 1004 si la mida de l’enter és 4. De nou. Ho estem desferenciant, de manera que ens donarà el 2ndenter. D’aquesta manera, tot funciona.

Per tant, aquest és bàsicament un programa senzill que demana als usuaris que introdueixin n enter, i simplement mostrem aquests enters a la pantalla. Després d'executar el programa, es mostrarà.

En primer lloc, demanem a l’usuari que introdueixi el nombre de nombres enters i, a continuació, l’usuari introdueix els nombres enters, i simplement els mostrem a la pantalla.

Conclusió:

No hi ha res de dolent en el programa anterior, sempre que el continuem durant molt de temps, prenem la memòria de l’emmagatzematge dinàmic, però mai no retornem la memòria a l’emmagatzematge. córrer durant una llarga durada com 24 hores. Tornaran a trucar a la funció malloc, i això significa que cada vegada que prenen memòria de l’emmagatzematge i no tornen mai, es tracta d’una mala programació, de manera que hauríem d’escriure lliurement (l’adreça de memòria que s’hauria d’alliberar) abans de tornar. Per tant, sempre que utilitzeu malloc free és important. Per tant, utilitzant malloc, hem conservat la memòria i malloc assigna memòria tan gran com ho demaneu.

Feliç assignació de memòria dinàmicament!