Rumah  >  Artikel  >  tutorial komputer  >  fungsi malloc untuk peruntukan memori dinamik dalam bahasa C

fungsi malloc untuk peruntukan memori dinamik dalam bahasa C

WBOY
WBOYke hadapan
2024-01-17 09:09:06852semak imbas

fungsi malloc untuk peruntukan memori dinamik dalam bahasa C

Fungsi malloc dalam bahasa C

Perlu memasukkan fail pengepala:

#saya sertakan

atau

#saya sertakan

Pengisytiharan fungsi (prototaip fungsi):

kosong *mallok(saiz int);

Fungsi malloc digunakan untuk digunakan pada sistem untuk memperuntukkan ruang memori dengan saiz yang ditentukan, dan jenis pemulangan adalah tidak sah*. Dalam C dan C++, penunjuk jenis void* boleh dihantar ke penunjuk jenis lain.

Seperti yang dapat dilihat daripada pengisytiharan fungsi, terdapat sekurang-kurangnya dua perbezaan antara malloc dan baharu: baharu mengembalikan penunjuk jenis yang ditentukan dan boleh mengira saiz yang diperlukan secara automatik. Contohnya:

int *p;

p = new int; //Jenis pulangan ialah jenis int* (penunjuk integer), dan saiz peruntukan ialah sizeof(int);

atau:

int* parr;

parr = new int [100]; //Jenis pulangan ialah jenis int* (penunjuk integer), dan saiz peruntukan ialah sizeof(int) * 100;

Dengan malloc, kita mesti mengira bilangan bait yang diperlukan dan memaksa penukaran kepada penunjuk jenis sebenar selepas kembali.

int* p;

p = (int *) malloc (saiz(int));

Pertama, fungsi malloc mengembalikan jenis void * Jika anda menulis: p = malloc (sizeof(int)); jenis pembolehubah." Jadi anda mesti lulus (int *) untuk menghantar.

Kedua, parameter sebenar fungsi ialah sizeof(int), yang digunakan untuk menentukan saiz data integer yang diperlukan. Jika anda menulis:

int* p = (int *) malloc (1);

Kod ini juga boleh dikompilasi, tetapi sebenarnya hanya 1 bait ruang memori diperuntukkan Apabila anda menyimpan integer di dalamnya, 3 bait akan menjadi gelandangan dan terus "tinggal di rumah jiran" "! Hasilnya ialah semua kandungan data asal dalam memori seterusnya dikosongkan.

malloc juga boleh mencapai kesan [] baru dan memohon untuk ingatan berterusan Kaedah ini tidak lebih daripada menentukan saiz memori yang anda perlukan.

Sebagai contoh, jika anda ingin memperuntukkan 100 ruang jenis int:

int* p = (int *) malloc ( sizeof(int) * 100 ); //Peruntukkan ruang memori yang boleh memuatkan 100 integer.

Satu lagi perbezaan yang tidak dapat dilihat secara langsung ialah malloc hanya memperuntukkan memori dan tidak boleh memulakan memori yang diperoleh, jadi nilai memori baru yang diperolehi akan menjadi rawak.

Kecuali peruntukan yang berbeza dan kaedah keluaran akhir, penunjuk diperoleh melalui malloc atau baharu, dan operasi lain adalah konsisten.

Masalah dengan fungsi malloc dalam bahasa C saya menggunakan malloc dua kali dalam fungsi berikut untuk memberikan p sejumlah 6 unit memori

Kembangkan semua

Anda memperuntukkan memori dua kali. Kali pertama ialah 3 int Malangnya, anda kehilangannya Kali kedua anda memperuntukkan tiga int, anda masih menggunakan penunjuk ini. dan terus keluar dari sempadan dan menulis di luar sempadan 3 unit int, bernasib baik kerana program itu tidak ranap serta-merta

int *p, *p1,i;

p = (int *)malloc(3*saiz(int));

untuk(i=0;i

printf("n int put:");

scanf("%d",p+i);

}

p1 = (int *)malloc(3*saiz(int));

untuk(i=0; i

printf("n int put:");

scanf("%d",p1+i);

}

untuk(i=0;i

untuk(i=0;i

Masalah fungsi malloc yang sangat mudah

Anda boleh lihat prototaip fungsi malloc

void* malloc(int)

Parameter malloc ialah integer, yang menunjukkan jumlah memori yang akan digunakan, dalam bait Nilai pulangan ialah penunjuk kepada memori itu, iaitu penunjuk jenis nol.

Dan sizeof ialah operator, di mana anda boleh mendapatkan bilangan bait dalam memori yang diduduki oleh jenis atau pembolehubah, dan hasilnya ialah integer. Jadi pp=(float *)malloc(sizeof(float)); sebenarnya mengira sizeof(float) terlebih dahulu untuk mendapatkan bilangan bait yang diduduki oleh jenis apungan dalam persekitaran 32-bit, ia mestilah 4 bait, dan hasilnya ialah 4. Kemudian malloc(4) digunakan untuk ruang memori 4-bait, mengembalikan alamat kawasan memori ini, dan kemudian memaksanya untuk ditukar kepada jenis float*.

Mengenai senarai terpaut, setiap elemen senarai terpaut menyimpan alamat elemen seterusnya atau sebelumnya, setiap elemen senarai terpaut menduduki ruang memori Apabila anda ingin menambah elemen senarai terpaut yang baharu, anda mesti memperuntukkan alamat kepada elemen ini terlebih dahulu. sebaliknya Data tidak mempunyai tempat untuk disimpan.

Atas ialah kandungan terperinci fungsi malloc untuk peruntukan memori dinamik dalam bahasa C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:docexcel.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam