Kebetulan saya sedang penasaran dengan si segmentation fault ini.
Setelah bereksperimen dikit, ada hal baru yg. saya dapet yg. mungkin
berguna.
(lihat komentar saya di bawah).
Ronny Haryanto wrote:
>
> Segfault itu artinya programnya berusaha mengakses memory yg bukan
> miliknya. Memory management di unix pake segments seingat saya.
> Contoh sederhana, kita allocate space utk array ukuran 10 tapi kita
> mencoba meng-assign value ke element ke-100-nya:
> int i[10];
> i[99] = 5;
>
lucunya, contoh program bung Ronny di atas kalo di kompile lalu dirun,
_nggak_ menghasilkan segfault (paling nggak di Linux saya).
Jadi kesimpulan saya gini:
sebuah program kalo di-load ke memory, akan punya beberapa bagian
memory, contohnya data (data segment), code (code segment), stack,
dan read-only segmen (?).
Segmentation fault terjadi kalo program:
1. membaca/menulis lokasi memory diluar memory space si program (?)
2. menulis ke segmen yg. bukan data atau stack segmen.
contoh u/. no 1:
main () {
int *p = 1;
int j;
j = *p;
}
contoh u/. no 2:
main() {
int *p = &main;
*p = 10;
}
Program bung Ronny di atas nggak segfault karena i[99] itu (kebetulan)
masih masuk ke data segment. Jadi yg. terjadi adalah memory overwrite.
--
cheers,
Bennylp
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]