CARA MENGGUNAKAN FUNGSI MALLOC DI C

How Use Malloc Function C



Malloc adalah fungsi bawaan yang dinyatakan dalam fail tajuk. Malloc adalah nama ringkas untuk 'peruntukan memori' dan digunakan untuk secara dinamis mengalokasikan satu blok besar memori bersambung mengikut ukuran yang ditentukan. Terdapat dua jenis peruntukan memori statik dan dinamik. Peruntukan memori statik dilakukan pada waktu penyusunan, dan tidak berubah pada waktu berjalan. Peruntukan memori dinamik memperuntukkan memori pada waktu berjalan untuk ini; kami menggunakan malloc. Sekarang intinya adalah dari mana ingatan ini datang, jadi semua keperluan dinamik dalam C dipenuhi dari memori timbunan. Pada dasarnya, aplikasi / program kita akan mempunyai 3 jenis memori

  • Memori tumpukan adalah lokal untuk setiap kaedah, dan apabila kaedah kembali, tumpukan secara automatik menghapusnya.
  • Kawasan memori global memperuntukkan memori untuk semua pemboleh ubah global. Kawasan memori ini dibuat pada awal program, dan pada akhirnya, secara automatik membersihkan kawasan memori.
  • Memori tumpukan selalu memenuhi semua keperluan dinamik program / aplikasi. Setiap kali kita akan menggunakan fungsi malloc, ia akan meminjam sedikit memori dari timbunan dan memberi kita petunjuk kepadanya.

Sintaks:







Sintaks malloc adalah (void *) malloc (size_t size). Jadi sintaksnya mengatakan bahawa malloc memerlukan ukuran, ia akan mengembalikan penunjuk pada dasarnya penunjuk yang tidak sah dan ukuran t didefinisikan sebagai bilangan bulat yang tidak ditandatangani. Fungsi Malloc hanya memperuntukkan blok memori mengikut ukuran yang ditentukan dalam timbunan seperti yang anda lihat dalam sintaks bahawa ukuran perlu ditentukan dan, pada kejayaan, ia mengembalikan penunjuk yang menunjuk ke bait pertama memori yang diperuntukkan yang lain mengembalikan NULL . Jadi, tugas malloc adalah untuk memperuntukkan memori pada masa berjalan.



Mengapa tidak menunjukkan penunjuk:

Malloc tidak mempunyai idea tentang apa yang ditunjuk; ia bermaksud tidak tahu data apa yang akan disimpan di lokasi memori tersebut. Ia hanya memperuntukkan memori yang diminta oleh pengguna tanpa mengetahui jenis data yang akan disimpan di dalam memori. Itulah sebabnya ia mengembalikan penunjuk kosong.



Malloc hanya mengalokasikan memori setelah itu menjadi tanggungjawab pengguna untuk menaip jenis ke jenis yang sesuai sehingga dapat digunakan dengan betul dalam program. Void pointer adalah pointer yang dapat menunjukkan semua jenis data malloc mengembalikan void pointer kerana tidak tahu jenis data yang akan disimpan di dalam memori tersebut.





Di sini kami meminta malloc untuk memperuntukkan 6 byte memori sekarang jika berjaya malloc akan mengembalikan penunjuk kosong. Dalam kes itu, kita harus menaipnya ke penunjuk jenis integer kerana kita ingin menyimpan bilangan bulat dalam memori itu. Di sini malloc memperuntukkan 6 byte memori dalam timbunan, dan alamat bait pertama disimpan di pointer ptr.



Contoh Program:

Berikut adalah contoh program mudah untuk memahami konsep malloc dengan cara yang betul.

Di sini anda dapat melihat dengan fungsi printf saya meminta pengguna memasukkan bilangan bilangan bulat. Kami telah menyatakan dua pemboleh ubah di atas i dan n. Pemboleh ubah n adalah tempat di mana kita akan menyimpan nombor yang dimasukkan oleh pengguna. Selepas itu, kita mempunyai fungsi malloc; kami mahu malloc memperuntukkan ukuran yang setara dengan ukuran n bilangan bulat. Kami mengalikan ukuran jika int dengan n; ini akan memberi kita ukuran n bilangan bulat. Selepas itu, malloc akan mengembalikan penunjuk yang tidak sah, dan kami menaipnya ke penunjuk bilangan bulat, dan kami menyimpan alamat di dalam penunjuk ptr. Penaipan huruf adalah penting kerana ia adalah amalan yang baik.

Sekarang, jika penunjuk mengandungi NULL, ini bermakna memori tidak tersedia. Oleh itu, kita hanya akan keluar dari program dengan status kegagalan keluar. Sekiranya ini tidak berlaku, kita boleh menjalankan loop dengan mudah.

Gelung akan berjalan dari 0 hingga n-1, dan kami akan meminta pengguna memasukkan bilangan bulat satu persatu setiap kali. Dalam fungsi scanf, ada satu perkara yang ditulis ptr + i kerana kita tahu bahawa ptr mengandungi alamat memori byte pertama. Katakan bahawa alamat adalah 1000 di sini saya sama dengan sifar pada mulanya jadi 1000 + 0 adalah 1000 jadi dalam alamat itu bilangan bulat pertama kita akan disimpan kemudian selepas itu apabila saya menjadi 1 jadi 1000 + 1 yang secara dalaman ditafsirkan sebagai (1000) +1 * 4 jika saya menganggap ukuran bilangan bulat adalah 4 bait, dan itu sama dengan 1004, jadi bilangan bulat berikutnya akan disimpan dalam 1004 lokasi. Dan ini akan berterusan dengan alamat seperti 1000, 1004, 1008 dan seterusnya. Kami tidak menggunakan ampersand sebelum ptr + i kerana ptr sudah memberi kita alamat ketika kita menulis ptr, yang hanya penunjuk, dan itu berisi alamat, bukan nilai, jadi tidak ada syarat untuk meletakkan ampersand sebelum itu, dan konsep ini harus jelas.

Di dalam gelung ini, kita hanya melakukan satu perkara yang kita mencetak semua bilangan bulat di skrin; jelas, kita menggunakan ptr + i, tetapi di sini, dalam hal ini, kita tidak memperhitungkannya kerana ptr + i mewakili alamat, jadi kita perlu membatalkannya. Sekiranya saya sama dengan 0, ia akan menjadi 1000 kerana kita menganggap alamat pertama akan menjadi 1000, jadi kita membatalkannya; kita akan mendapat bilangan bulat pertama maka saya sama dengan 1, dan ia akan menjadi 1001 tetapi ditafsirkan sebagai 1004 jika ukuran bilangan bulat adalah 4. Sekali lagi. Kami membatalkannya, jadi ini akan memberi kita 2ndbilangan bulat. Dengan cara ini, semuanya berfungsi.

Jadi, ini pada dasarnya adalah program sederhana yang meminta pengguna memasukkan n bilangan bulat, dan kemudian kita hanya memaparkan bilangan bulat tersebut di layar. Setelah melaksanakan program, ini akan dipaparkan.

Pertama, kami meminta pengguna memasukkan jumlah bilangan bulat, dan kemudian pengguna memasukkan bilangan bulat, dan kami hanya memaparkannya di layar.

Kesimpulan:

Tidak ada yang salah dalam program di atas selama kita meneruskannya untuk waktu yang sangat lama di sini kita meminjam memori dari timbunan, tetapi kita tidak pernah mengembalikan memori ke timbunan itu hanya berlaku sekiranya program / aplikasi mempunyai untuk berjalan dalam jangka masa yang panjang seperti 24 jam. Mereka akan memanggil fungsi malloc lagi, dan itu sekali lagi bermaksud setiap kali mereka meminjam memori dari timbunan dan tidak pernah kembali, ini adalah pengaturcaraan yang tidak baik, jadi kita harus menulis secara percuma (alamat memori yang harus dilepaskan) sebelum kembali. Oleh itu, setiap kali menggunakan malloc percuma adalah penting. Oleh itu, dengan menggunakan malloc, kita telah menyimpan memori, dan malloc memperuntukkan memori sebesar yang anda minta.

Selamat peruntukan memori secara dinamik!