Pointer Dangling, Void, Null, dan Wild pada Bahasa C
Pointer Dangling
Pointer Dangling Dealokasi Memori (1)
Contoh:
// Dealokasi memori yang
// ditunjuk oleh ptr karena
// pointer dangling.
#include <stdlib.h>
#include <stdio.h>
int main()
{
int *ptr = (int *)malloc(sizeof(int));
// Setelah dilakukan free
// call, ptr menjadi sebuah
// pointer dangling.
free(ptr);
// Sudah tidak ada pointer
// dangling
ptr = NULL;
}
Contoh:
// Pointer yang menunjuk ke
// variabel lokal menjadi
// pointer dangling ketika
// variabel lokal tersebut
// adalah bukan tipe static.
#include<stdio.h>
int *fun()
{
// 'x' adalah variabel lokal
// dan menjadi bagian dari
// scope setelah proses
// eksekusi fungsi fun()
// selesai dijalankan.
int x = 5;
return &x;
}
// Driver Code
int main()
{
int *p = fun();
fflush(stdin);
// p menunjuk ke sesuatu yang
// sudah tidak lagi bernilai
// valid.
printf("%d", *p);
return 0;
}
Output:A garbage Address
Penjelasan: Pada contoh sebelumnya pointer tidak akan menampilkan dangling jika nilai x adalah variabel statik.
Contoh:
// Pointer menunjuk ke
// variabel lokal yang tidak
// menjadi dangling ketika
// variabel lokal tersebut
// adalah tipe static.
#include<stdio.h>
int *fun()
{
// 'x' sekarang memiliki scope
// sepanjang program.
static int x = 5;
return &x;
}
int main()
{
int *p = fun();
fflush(stdin);
// Bukan pointer dangling,
// karena menunjuk ke variabel
// bukan static.
printf("%d",*p);
}
Output:5
Variabel Diluar Jangkauan Scope (3)
Contoh Sintak:
void main()
{int *ptr;
.....
{int ch; ptr = &ch;}
/* Posisi pointer dangling */}
Pointer Void
Pointer Void merupakan sebuah tipe pointer spesifik – void * – yang menunjuk ke beberapa lokasi data dalam penyimpanan, yang tidak memiliki tipe data spesifik apapun. Void mengacu pada tipe data, yang pada dasarnya, tipe data yang ditunjuk oleh pointer void, yang bukan merupakan tipe data jenis apapun. Jika dilakukan pelabelan alamat dari tipe data char ke pointer void, maka tipe data tersebut akan menjadi pointer char, sedangkan jika dilakukan pelabelan tipe data integer, maka pointer akan menjadi pointer integer, dan seterusnya. Setiap tipe pointer dapat dikonversi menjadi pointer tipe void, yang dapat mengacu pada jenis nilai apapun.Catatan: Pointer void tidak dapat dilakukan dereferensi. Hal tersebut hanya dapat dilakukan dengan menggunakan typecasting ke pointer tipe void. Juga, arimatika pointer tidak dimungkinkan penggunaannya pada pointer tipe void kareka nilai tidak dapat terkuantifikasi, begitupun juga untuk ukuran variabelnya.
Contoh:
#include<stdlib.h>
int main()
{
int x = 4;
float y = 5.5;
//Pointer void
void *ptr;
ptr = &x;
// (int*)ptr - memiliki
// typecasting dari pointer
// *((int*)ptr) yang melakukan
// dereferensi variabel
// pointer void typecast.
printf("Integer variable is = %d", *( (int*) ptr) );
// Pointer void sekarang
// bertipe float
ptr = &y;
printf("\nFloat variable is= %f", *( (float*) ptr) );
return 0;
}
Output:Integer variable is = 4
Float variable is= 5.500000
Refer void pointer article for details.
Pointer NULL
Pointer NULL merupakan sebuah pointer yang menunjuk tidak pada nilai apapun. Kondisi ini dapat terpenuhi pada situasi dimana tidak ditemukan alamat apapun untuk ditandai oleh sebuah pointer, sehingga pointer tersebut akan menjadi NULL.Contoh:
#include <stdio.h>
int main()
{
// Pointer Null
int *ptr = NULL;
printf("The value of ptr is %p", ptr);
return 0;
}
Output:The value of ptr is (nil)
Important Points
Pointer NULL vs Pointer Yang Tidak Terinisialisasi: Pointer yang tidak terinisialisasi merupakan pointer yang menyimpan nilai tidak terdefinisi, sedangkan pointer NULL merupakan pointer yang menyimpan nilai yang terdefinisi, tetapi nilai yang terdefinisi tersebut dianggap tidak valid nilai alamatnya oleh object atau member apapun.
Pointer Wild
Sebuah pointer yang tidak diinisialisasi untuk hal apapun termasuk untuk nilai NULL, maka pointer tersebut dikenal dengan istilah Wild Pointer. Wild Pointer pada dasarnya mungkin saja diinisialisasi untk nilai garbage non-NULL yang tidak memiliki alamat yang valid.Contoh Fungsi:
int main()
{int *p; /* wild pointer */
int x = 10;
/* p is not a wild pointer now */
p = &x; return 0;}
- Pointer NULL Bahasa C Beserta Fungsi dan Penjelasannya
- Pointer Ke Fungsi Bahasa C Beserta Penjelasannya
- Pointer Near, Far, dan Huge Bahasa C Beserta Penjelasannya
- Linked List Bahasa C Beserta Fungsi dan Penjelasannya
- Keyword Restrict Bahasa C Beserta Penjelasannya
- Perbedaan Antara const char *p, char * const p, dan const char * const p Bahasa C
- Pointer Ke Array Bahasa C dan Penjelasannya
6 komentar untuk "Pointer Dangling, Void, Null, dan Wild pada Bahasa C"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apa yang dimaksud dengan pointer dangling pada bahasa C?
BalasHapusPointer dangling pada bahasa C merupakan pointer yang terjadi ketika pointer tersebut menunjuk ke variabel output dari ruang lingkung atau ketika memori object atau variabel tidak dialokasikan.
HapusPointer dangling yang muncul pada suatu program dapat mengakibatkan beberapa kesalahan tak terduga selama proses eksekusi program.
HapusPointer dangling muncul selama proses penghancuran objectk, dimana object yang memiliki referensi yang masuk dihapus atau tidak dialokasikan, tanpa mengubah nilai pointer, sehingga pointer tetap menunjuk ke lokasi memori dari memori yang tidak dialokasikan.
HapusPointer dangling merupakan pointer yang menunjuk ke lokasi memori yang telah dibebaskan atau dihapus.
HapusPointer dangling muncul ketika object referensi dihapus atau dibatalkan alokasi memorinya, tanpa mengubah nilai pointer.
Hapus