On Sat, 8 Jan 2005 18:40:05 +0900, baskara <[EMAIL PROTECTED]> wrote:
>
> Saya mau tanya sedikit keanehan pada program C saya.
> Isinya kira2 begini:
>
> int k;
> int *p;
di sini p == 12716 (default)
>
> main() {
> k = 0;
di sini k == 0
> if ( (cpid = fork()) == 0) {
> for (;;) {
> k = 1; printf("child1 = %d %d \n",k,p);
di sini alamat yang ditunjuk p masih tetap (12716)
pada proses anak k == 1, pada proses bapak k == 0 (tetap, karena fork
mengkopi memori)
> }
> }
>
> if ((cpid = fork()) == 0) {
> for (;;) {
> printf("child2 = %d %d \n",k,p);
di sini alamat yang ditunjuk p masih tetap (12716)
> }
> }
> }
>
> Hasilnya begini:
>
> child1 = 1 12716
> child2 = 0 12716
1 adalah nilai k di proses anak, 0 adalah nilai k di proses bapak, dan
12716 adalah nilai p baik di anak maupun bapak.
>
> ___ alamat memori sama, tetapi isinya beda ??? _______
Alamat memori yang ditunjuk p memang seharusnya sama (tidak ada
assignment), tapi isi dari k berbeda (ada assignment). Jadi di mana
anehnya mas ;)
>
--
Demi masa..