malloc dan free
Alokasikan pada heap.
malloc dan free adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.
Heap
Sejauh ini, variabel berada di stack dengan masa berlaku tetap. Heap memungkinkan Anda meminta memori saat program berjalan dan menyimpannya selama diperlukan.
Anda mengelola memori heap sendiri menggunakan fungsi <stdlib.h>.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *p = malloc(sizeof(int));
*p = 99;
printf("%d\n", *p);
free(p);
return 0;
}Memanggil malloc
malloc(size) mencadangkan size byte dan mengembalikan penunjuk ke memori tersebut, atau NULL jika gagal.
Memori tersebut belum diinisialisasi: isinya tidak dapat ditentukan.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *p = malloc(sizeof(int));
*p = 7;
printf("value = %d\n", *p);
free(p);
return 0;
}Menentukan Ukuran dengan sizeof
Selalu tentukan ukuran alokasi dengan sizeof agar kode berjalan benar di platform apa pun.
Penulisan sizeof(*p) secara otomatis mengaitkan ukuran dengan tipe penunjuk.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
double *p = malloc(sizeof(*p));
*p = 3.14;
printf("%f\n", *p);
free(p);
return 0;
}Selalu Periksa NULL
Jika alokasi gagal, malloc mengembalikan NULL. Melakukan dereferensi terhadapnya akan membuat program berhenti karena galat.
Periksa hasilnya sebelum menggunakannya.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *p = malloc(sizeof(int));
if (p == NULL) {
printf("allocation failed\n");
return 1;
}
*p = 5;
printf("ok: %d\n", *p);
free(p);
return 0;
}Mengalokasikan Larik
Untuk menampung banyak elemen, kalikan ukuran elemen dengan jumlahnya.
malloc(n * sizeof(int)) menyediakan ruang untuk n bilangan bulat.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n = 5;
int *arr = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) arr[i] = i * i;
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
free(arr);
return 0;
}Larik Heap Menggunakan Pengindeksan Penunjuk
Larik heap diakses melalui penunjuknya dengan sintaks arr[i] yang sudah lazim, dan sintaks ini sama dengan *(arr + i).
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *arr = malloc(3 * sizeof(int));
arr[0] = 10;
*(arr + 1) = 20;
arr[2] = 30;
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
free(arr);
return 0;
}Membebaskan Memori
free(p) mengembalikan blok memori kepada pengalokasi. Setelah itu, Anda tidak boleh menggunakan p untuk mengakses memori tersebut.
Setiap malloc yang berhasil memerlukan free yang sesuai.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *buf = malloc(16);
if (buf) {
buf[0] = 'A';
printf("%c\n", buf[0]);
free(buf);
}
return 0;
}free(NULL) Aman
Memanggil free pada penunjuk NULL tidak melakukan apa pun dan sepenuhnya sah.
Hal ini menyederhanakan kode pembersihan yang mungkin dijalankan sebelum alokasi berhasil.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *p = NULL;
free(p);
printf("free(NULL) was safe\n");
return 0;
}Mengembalikan Memori Heap
Berbeda dari variabel stack, memori heap tetap ada setelah fungsi dikembalikan. Dengan demikian, fungsi dapat mengalokasikan dan mengembalikan buffer.
#include <stdio.h>
#include <stdlib.h>
int *make_range(int n) {
int *a = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) a[i] = i;
return a;
}
int main(void) {
int *r = make_range(4);
printf("%d %d\n", r[0], r[3]);
free(r);
return 0;
}Jangan Melakukan Cast pada malloc dalam C
Dalam C, malloc mengembalikan void * yang secara otomatis dapat dikonversi menjadi tipe penunjuk apa pun.
Cast tidak diperlukan dan dapat menyembunyikan include <stdlib.h> yang terlewat.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
long *p = malloc(sizeof(long));
*p = 1234567L;
printf("%ld\n", *p);
free(p);
return 0;
}Jangan Membebaskan Dua Kali
Memanggil free dua kali pada penunjuk yang sama merupakan perilaku tak terdefinisi dan dapat merusak heap.
Atur penunjuk menjadi NULL setelah membebaskannya agar penggunaan ulang secara tidak sengaja tidak berbahaya.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *p = malloc(sizeof(int));
*p = 1;
free(p);
p = NULL;
free(p);
printf("no double free\n");
return 0;
}Pemeriksaan Cepat
Uji pengetahuan Anda tentang malloc dan free.
Rangkuman
Anda telah mempelajari dasar-dasar alokasi heap:
malloc(size)mencadangkan byte yang belum diinisialisasi dan mengembalikanNULLjika gagal.- Selalu periksa hasil dan ukurannya dengan
sizeof. free(p)mengembalikan memori; setiap malloc memerlukan satu free.free(NULL)aman; membebaskan dua kali menghasilkan perilaku tak terdefinisi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “malloc dan free” gratis?
Ya — teks lengkap “malloc dan free” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “malloc dan free”?
Alokasikan pada heap. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C Academy?
Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “malloc dan free” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- malloc dan free
- calloc dan realloc
- Kebocoran Memori
- Pointer Menggantung