Rumah > Artikel > pembangunan bahagian belakang > Apa yang Berlaku kepada Memori Pembolehubah Selepas Skopnya Tamat: Ditimpa Serta-merta atau Dipelihara Sehingga Kesimpulan Fungsi?
Apabila pembolehubah diisytiharkan dalam blok kod, skopnya mentakrifkan bahagian kod di mana ia boleh diakses . Tetapi apa yang berlaku kepada memori yang diperuntukkan kepada pembolehubah apabila skopnya tamat? Adakah ia ditimpa serta-merta, atau adakah ia kekal dikhaskan sehingga fungsi di mana ia berada berakhir?
Soalan ini timbul daripada coretan kod berikut:
foo() { int *p; { int x = 5; p = &x; } int y = *p; // undefined behavior }
Jika ingatan pembolehubah x masih diperuntukkan selepas ia keluar dari skop, penunjuk p akan terus menunjuk ke lokasi yang betul, membolehkan kami mengakses nilai x walaupun ia tidak lagi dalam skop.
Untuk merungkai enigma ini, kita mesti mendalami konsep skop dan seumur hidup.
Skop merangkumi bahagian kod di mana pembolehubah boleh diakses. Apabila pembolehubah diisytiharkan dalam pendakap kerinting ({}), skopnya terhad kepada blok kod tertutup.
Seumur hidup merangkumi tempoh pembolehubah atau objek wujud dalam keadaan sah. Untuk pembolehubah bukan statik automatik atau tempatan, hayatnya terhad kepada skopnya. Dalam erti kata lain, pembolehubah ini dimusnahkan secara automatik setelah skopnya tamat.
Dalam coretan kod yang diberikan, pembolehubah x diisytiharkan sebagai pembolehubah tempatan bukan statik , bermakna hayatnya terikat kepada skopnya. Apabila skop dalaman tamat, x tidak lagi wujud, meninggalkan penuding p menunjuk ke lokasi yang tidak lagi sah.
Akibatnya, percubaan untuk mengakses nilai x melalui p adalah tingkah laku yang tidak ditentukan. Pengkompil mungkin atau mungkin tidak memperuntukkan memori kepada x di luar skopnya, membawa kepada hasil yang tidak dapat diramalkan. Oleh itu, adalah penting untuk mengelak daripada mengakses pembolehubah yang skopnya telah tamat.
Atas ialah kandungan terperinci Apa yang Berlaku kepada Memori Pembolehubah Selepas Skopnya Tamat: Ditimpa Serta-merta atau Dipelihara Sehingga Kesimpulan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!