HUR DU ANVÄNDER MALLOC -FUNKTIONEN I C

How Use Malloc Function C



Malloc är en inbyggd funktion som deklareras i rubrikfilen. Malloc är det korta namnet för 'minnesallokering' och används för att dynamiskt tilldela ett enda stort block av sammanhängande minne enligt den angivna storleken. Det finns två typer av minnestilldelning statisk och dynamisk. Statisk minnesallokering görs vid kompileringstiden, och den ändras inte vid körning. Dynamisk minnesallokering är att allokera minne vid körning för detta; vi använder malloc. Nu är punkten varifrån detta minne kommer, så alla dynamiska krav i C uppfylls från högminnet. I grund och botten kommer vår applikation/program att ha tre sorters minne

  • Stackminne är lokalt för varje metod, och när metoden återvänder raderas stacken automatiskt.
  • Det globala minnesområdet tilldelar minne för alla globala variabler. Detta minnesområde skapas i början av programmet, och i slutändan rensar det automatiskt minnesområdet.
  • Heapminne uppfyller alltid alla dynamiska krav för program/applikationer. Närhelst vi ska använda malloc -funktionen kommer den att låna lite minne från högen och ge oss pekaren till den.

Syntax:







Syntaxen för malloc är (void*) malloc (size_t size). Så syntaxen säger att malloc kräver en storlek, det kommer att returnera pekaren i princip en tom pekare och storlek t definieras som ett osignerat heltal. Malloc -funktionen tilldelar helt enkelt ett minnesblock enligt storleken som anges i högen, som du kan se i syntaxen att storleken måste anges och efter framgången returnerar den en pekare som pekar på den första byten i det tilldelade minnet, annars returnerar NULL . Så, mallocs uppgift är att fördela minne vid körtid.



Varför tomrumspekare:

Malloc har ingen aning om vad det pekar på; det betyder helt enkelt att den inte vet vilken data som ska lagras på den minnesplatsen. Det tilldelar bara minne begärt av användaren utan att veta vilken typ av data som ska lagras inuti minnet. Det är därför det returnerar en tomrumspekare.



Malloc tilldelar bara minne efter det är det användarens ansvar att typecast till en lämplig typ så att det kan användas korrekt i programmet. Ogiltig pekare är en pekare som kan peka vilken typ av data som helst malloc returnerar ogiltig pekare eftersom den inte vet vilken typ av data som kommer att lagras i det minnet.





Här ber vi malloc att tilldela 6 byte minne nu om det blir en framgång malloc kommer att returnera en tom pekare. I så fall måste vi skriva det till en heltalstyppekare eftersom vi vill lagra ett heltal i det minnet. Här tilldelar malloc 6 byte minne i en hög, och adressen till den första byten lagras i pekaren ptr.



Exempelprogram:

Här är ett enkelt exempelprogram för att förstå begreppet malloc på ett riktigt sätt.

Här kan du se med funktionen printf jag ber användaren att ange antalet heltal. Vi har deklarerat två variabler ovanför i och n. Variabel n är platsen där vi kommer att lagra det nummer som användaren har angett. Efter det har vi malloc -funktionen; vi vill att malloc tilldelar storleksekvivalenten till storleken på n heltal. Vi multiplicerar storlek om int med n; detta ger oss storleken på n heltal. Efter det kommer malloc att returnera en ogiltig pekare, och vi skriver ut den till en heltalspekare, och vi lagrar adressen i ptr -pekaren. Typecasting är viktigt eftersom det är en bra praxis.

Om pekaren innehåller NULL betyder det att minnet inte är tillgängligt. Så vi kommer helt enkelt att lämna programmet med statusen för utgångsfel. Om detta inte är fallet kan vi enkelt köra for a loop.

Slingan körs från 0 till n-1, och vi kommer att be användaren att ange heltal ett efter ett varje gång. Inom scanf -funktionen finns det en sak skriven ptr+i eftersom vi vet att ptr innehåller adressen till den första byten i minnet. Låt oss säga att adressen är 1000 här i är lika med noll initialt så 1000+0 är 1000 så inom den adressen kommer vårt första heltal att lagras sedan när jag blir 1 så 1000+1 som internt tolkats som (1000) +1 *4 om jag antar att heltalets storlek är 4 byte, och det skulle vara lika med 1004, så nästa heltal kommer att lagras inom 1004 plats. Och detta kommer att fortsätta på detta sätt adresserna är som 1000, 1004, 1008 och så vidare. Vi använder inte ampersand före ptr+i eftersom ptr redan ger oss adressen när vi skriver ptr, som helt enkelt är en pekare, och den innehåller adressen, inte värdet, så det finns inget krav på att sätta ampersand före det, och detta koncept bör vara tydligt.

Här i den här slingan gör vi helt enkelt en sak, vi skriver ut alla heltal på skärmen; uppenbarligen använder vi ptr+i, men här, i det här fallet, refererar vi till det eftersom ptr+i representerar en adress, så vi måste avse den. Om jag är lika med 0 blir det 1000 eftersom vi antar att den första adressen kommer att vara 1000, så vi refererar till det; vi får det första heltalet då i lika med 1, och det blir 1001 men tolkas som 1004 om heltalets storlek är 4. Återigen. Vi aviserar det, så det ger oss 2: anndheltal. På så sätt fungerar allt.

Så det här är i grunden ett enkelt program som ber användare att ange n heltal, och sedan visar vi helt enkelt dessa heltal på skärmen. När programmet har körts visas detta.

Först ber vi användaren att ange antalet heltal, och sedan anger användaren heltalen, och vi visar dem helt enkelt på skärmen.

Slutsats:

Det är inget fel i ovanstående program så länge vi fortsätter det mycket länge här lånar vi minne från högen, men vi återlämnar aldrig minnet till hög, det händer bara i det fallet där programmet/applikationen har att springa under en lång tid som 24 timmar. De kommer att ringa till malloc -funktionen igen, och igen betyder det att varje gång de lånar minne från högen och aldrig återvänder, är detta dålig programmering, så vi borde skriva gratis (minnesadressen som ska släppas) innan vi återvänder. Så när du använder malloc gratis är viktigt. Så med hjälp av malloc har vi bevarat minne, och malloc fördelar minnet så stort som du frågar det.

Lyckligt dynamiskt minnesfördelning!