Pelakon Misterius untuk malloc() dalam C
Dalam bahasa pengaturcaraan C, adalah amalan biasa untuk memperuntukkan memori menggunakan malloc() berfungsi tanpa secara eksplisit menghantar nilai pulangannya. Walau bagaimanapun, dalam C, pendekatan yang kelihatan setara ini membawa kepada ralat penyusunan. Mengapakah pemutus tambahan ini diperlukan dalam C ?
Memahami Perbezaan
C membenarkan penukaran tersirat penunjuk tidak sah, dikembalikan oleh malloc(), kepada mana-mana penuding objek lain menaip. Sintaks yang dipermudahkan ini telah membawa kepada salah tanggapan bahawa penghantaran adalah pilihan dalam C juga. Walau bagaimanapun, C tidak mewarisi gelagat tersirat ini, memerlukan hantaran eksplisit untuk merapatkan jurang antara lompang* dan jenis penunjuk tertentu.
Potensi Perangkap dalam C
Semasa menghantar Nilai pulangan malloc() dalam C secara teknikalnya tidak diperlukan, ia boleh berfungsi sebagai jaring keselamatan yang berharga. Tanpa pelakon, terlupa untuk memasukkan stdlib.h atau mempunyai pengisytiharan yang tidak lengkap untuk malloc() boleh membawa kepada ralat penyusunan. C mentafsirkan panggilan fungsi yang tidak ditentukan sebagai int pengembalian secara lalai, yang bercanggah dengan jenis pulangan penunjuk malloc(). Mesej diagnostik yang terhasil memberi amaran kepada pembangun tentang ralat itu lebih awal.
Gunakan baharu dan padam dalam C
Daripada bergantung pada malloc() dan free() dalam C , adalah disyorkan untuk menggunakan alatan pengurusan memori khusus bahasa: baharu dan padam. Pengendali ini menyediakan peruntukan memori selamat jenis dan mengendalikan pembinaan dan pemusnahan objek dengan sewajarnya. Dengan menggunakan alatan yang sesuai, pengaturcara C boleh mengelakkan kemungkinan perangkap dan mengekalkan integriti kod mereka.
Nota Sejarah
Dalam versi awal C (pra-C89) , malloc() mengembalikan penunjuk char*. Ini memerlukan penghantaran apabila memberikan nilai pulangan kepada jenis penuding lain. Walau bagaimanapun, pelaksanaan C moden mematuhi piawaian C89, menjadikan pemutus eksplisit berlebihan dalam kebanyakan kes. Namun begitu, tabiat pemutus kekal atas sebab warisan.
Atas ialah kandungan terperinci Mengapa Menghantar Nilai Pulangan malloc() Diperlukan dalam C tetapi Tidak Sentiasa dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!