Lompat ke konten Lompat ke sidebar Lompat ke footer

Pointer Dangling, Void, Null, dan Wild pada Bahasa C

Pada artikel ini akan dijelaskan tentang Dangling Pointer, Void Pointer, Null Pointer, dan Wild Pointer.

Pointer Dangling, Void, Null, dan Wild pada Bahasa C
Pointer Dangling Bahasa C

Sebelum memahami materi tentang Pointer Dangling, Void, Null, dan Wild pada Bahasa C, terlebih dahulu pelajari materi tentang: Pengenalan Pointer Bahasa C Serta Penjelasannya [klik], Konsep Pointer Ke Pointer Bahasa C Beserta Penjelasannya [klik], dan Parameter Array Sebagai Pointer Bahasa C [klik].

Pointer Dangling
Sebuah pointer yang menunjuk sebuah lokasi memori yang telah dihapus atau dibebaskan alamat memorinya disebut sebagai pointer dangling. Terdapat tiga perbedaan cara, pada pointer dalam bertindak sebagai pointer dangling, yang diperlihatkan sebagai berikut:

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;

}


Pointer Dangling Pemanggilan Fungsi (2)

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.

Baca Juga:

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;
}

6 komentar untuk "Pointer Dangling, Void, Null, dan Wild pada Bahasa C"

  1. Apa yang dimaksud dengan pointer dangling pada bahasa C?

    BalasHapus
    Balasan
    1. Pointer 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.

      Hapus
    2. Pointer dangling yang muncul pada suatu program dapat mengakibatkan beberapa kesalahan tak terduga selama proses eksekusi program.

      Hapus
    3. Pointer 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.

      Hapus
    4. Pointer dangling merupakan pointer yang menunjuk ke lokasi memori yang telah dibebaskan atau dihapus.

      Hapus
    5. Pointer dangling muncul ketika object referensi dihapus atau dibatalkan alokasi memorinya, tanpa mengubah nilai pointer.

      Hapus

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 -