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]

Kirim email ke