KĀ LIETOT MALLOC FUNKCIJU C

How Use Malloc Function C



Malloc ir iebūvēta funkcija, kas deklarēta galvenes failā. Malloc ir saīsinājums “atmiņas piešķiršana”, un to izmanto, lai dinamiski piešķirtu vienu lielu blakus esošo atmiņas bloku atbilstoši norādītajam lielumam. Pastāv divu veidu statiskā un dinamiskā atmiņas piešķiršana. Statiskā atmiņas piešķiršana tiek veikta apkopošanas laikā, un izpildes laikā tas nemainās. Dinamiskā atmiņas piešķiršana ir atmiņas piešķiršana izpildlaika laikā; mēs izmantojam malloc. Tagad jautājums ir par to, no kurienes nāk šī atmiņa, tāpēc visas dinamiskās prasības C ir izpildītas no kaudzes atmiņas. Būtībā mūsu lietojumprogrammai/programmai būs 3 veidu atmiņa

  • Kaudzes atmiņa ir lokāla katrai metodei, un, kad metode atgriežas, kaudze to automātiski notīra.
  • Globālās atmiņas apgabals piešķir atmiņu visiem globālajiem mainīgajiem. Šī atmiņas zona tiek izveidota programmas sākumā, un beigās tā automātiski notīra atmiņas zonu.
  • Kaudzes atmiņa vienmēr ir ienaidnieks, kas atbilst visām programmas/lietojumprogrammas dinamiskajām prasībām. Ikreiz, kad mēs izmantosim malloc funkciju, tā aizņemsies atmiņu no kaudzes un parādīs mums rādītāju uz to.

Sintakse:







Malloc sintakse ir (void*) malloc (size_t size). Tātad sintakse saka, ka malloc ir nepieciešams lielums, tas atgriezīs rādītāju pamatā tukšuma rādītāju un lielums t ir definēts kā neparakstīts vesels skaitlis. Malloc funkcija vienkārši piešķir atmiņas bloku atbilstoši kaudzē norādītajam izmēram, kā redzams sintaksē, ka lielums ir jānorāda, un pēc panākumiem tā atgriež rādītāju, kas norāda uz piešķirtās atmiņas pirmo baitu, cits atgriež NULL . Tātad, malloc uzdevums ir piešķirt atmiņu izpildes laikā.



Kāpēc tukšuma rādītājs:

Malloc nav ne jausmas, uz ko tas norāda; tas vienkārši nozīmē, ka nezina, kādi dati tiks saglabāti šajā atmiņas vietā. Tas tikai piešķir lietotāja pieprasīto atmiņu, nezinot atmiņā glabājamo datu veidu. Tāpēc tas atgriež tukšuma rādītāju.



Malloc tikai piešķir atmiņu, pēc tam lietotājs ir atbildīgs par atbilstoša tipa ierakstīšanu, lai to varētu pareizi izmantot programmā. Tukšuma rādītājs ir rādītājs, kas var norādīt uz jebkura veida datiem, malloc atgriež tukšuma rādītāju, jo tas nezina, kāda veida dati tiks saglabāti šajā atmiņā.





Šeit mēs lūdzam malloc piešķirt 6 baitus atmiņas, ja tā būs veiksmīga, malloc atgriezīs tukšo rādītāju. Tādā gadījumā mums tas ir jāpārraksta uz vesela skaitļa tipa rādītāju, jo šajā atmiņā vēlamies saglabāt veselu skaitli. Šeit malloc kaudzē piešķir 6 baitus atmiņas, un pirmā baita adrese tiek saglabāta rādītājā ptr.



Programmas piemērs:

Šeit ir vienkāršs programmas piemērs, lai pareizi izprastu malloc jēdzienu.

Šeit jūs varat redzēt ar funkciju printf, es lūdzu lietotājam ievadīt veselu skaitļu skaitu. Mēs esam deklarējuši divus mainīgos virs i un n. Mainīgais n ir vieta, kur glabāsim lietotāja ievadīto numuru. Pēc tam mums ir malloc funkcija; mēs vēlamies, lai malloc piešķirtu izmēru, kas ekvivalents n veselo skaitļu lielumam. Mēs reizinām lielumu, ja int ar n; tas mums dos n veselo skaitļu lielumu. Pēc tam malloc atgriezīs tukšuma rādītāju, un mēs to ierakstām veselā skaitļa rādītājā, un mēs saglabājam adresi ptr rādītājā. Rakstīšana ar mašīnu ir svarīga, jo tā ir laba prakse.

Tagad, ja rādītājs satur NULL, tas nozīmē, ka atmiņa nav pieejama. Tātad mēs vienkārši iziesim no programmas ar iziešanas neveiksmes statusu. Ja tas tā nav, mēs varam viegli palaist cilpu.

Cikls darbosies no 0 līdz n-1, un mēs lūgsim lietotāju katru reizi ievadīt veselu skaitli pa vienam. Funkcijas scanf ietvaros ir rakstīta viena lieta ptr+i, jo mēs zinām, ka ptr satur atmiņas pirmā baita adresi. Pieņemsim, ka adrese šeit ir 1000, i sākotnēji ir vienāds ar nulli, tāpēc 1000+0 ir 1000, tāpēc šīs adreses ietvaros tiks saglabāts mūsu pirmais vesels skaitlis, pēc tam, kad i kļūs par 1 līdz 1000+1, kas iekšēji ir interpretēts kā (1000) +1 *4, ja es pieņemu, ka vesels skaitlis ir 4 baiti, un tas būtu vienāds ar 1004, tāpēc nākamais vesels skaitlis tiks saglabāts 1004 vietā. Un tas turpināsies šādā veidā, adreses ir, piemēram, 1000, 1004, 1008 un tā tālāk. Mēs neizmantojam ampersand pirms ptr+i, jo ptr jau dod mums adresi, kad mēs rakstām ptr, kas ir vienkārši rādītājs, un tajā ir adrese, nevis vērtība, tāpēc nav obligāti jāliek zīme pirms tā, un šim jēdzienam jābūt skaidram.

Šeit, šajā cilpā, mēs vienkārši darām vienu lietu, drukājot visus veselos skaitļus uz ekrāna; acīmredzot, mēs izmantojam ptr+i, bet šajā gadījumā mēs atsaucam to, jo ptr+i apzīmē adresi, tāpēc mums tas ir jāatceļ. Ja i ir vienāds ar 0, tas būs 1000, jo mēs pieņemam, ka pirmā adrese būs 1000, tāpēc mēs to atceļam; mēs iegūsim pirmo veselu skaitli, tad i būs vienāds ar 1, un tas kļūs par 1001, bet tiks interpretēts kā 1004, ja vesela skaitļa lielums ir 4. Atkal. Mēs to atceļam, tāpēc tas mums dos 2ndvesels skaitlis. Tādā veidā viss darbojas.

Tātad šī būtībā ir vienkārša programma, kas lietotājiem lūdz ievadīt n veselu skaitli, un tad mēs vienkārši parādām šos veselos skaitļus ekrānā. Pēc programmas izpildes tas parādīsies.

Pirmkārt, mēs lūdzam lietotājam ievadīt veselu skaitļu skaitu, un pēc tam lietotājs ievada veselus skaitļus, un mēs tos vienkārši parādām ekrānā.

Secinājums:

Iepriekš minētajā programmā nav nekas nepareizs, kamēr mēs to turpinām ļoti ilgu laiku šeit, mēs aizņemamies atmiņu no kaudzes, bet mēs nekad neatdodam atmiņu atpakaļ uz kaudzi, tas notiek tikai tādā gadījumā, ja programmai/lietojumprogrammai ir palaist ilgu laiku, piemēram, 24 stundas. Viņi atkal izsauks malloc funkciju, un tas atkal nozīmē, ka katru reizi, kad viņi aizņemas atmiņu no kaudzes un nekad neatgriežas, tā ir slikta programmēšana, tāpēc pirms atgriešanās mums vajadzētu rakstīt brīvu (atmiņas adresi, kas jāatbrīvo). Tāpēc vienmēr ir svarīgi izmantot malloc free. Tātad, izmantojot malloc, mums ir saglabāta atmiņa, un malloc piešķir tik lielu atmiņu, cik jūs to lūdzat.

Laimīgu dinamiski atmiņas piešķiršanu!