Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apa yang Berlaku kepada Memori Pembolehubah Selepas Skopnya Tamat: Ditimpa Serta-merta atau Dipelihara Sehingga Kesimpulan Fungsi?

Apa yang Berlaku kepada Memori Pembolehubah Selepas Skopnya Tamat: Ditimpa Serta-merta atau Dipelihara Sehingga Kesimpulan Fungsi?

Susan Sarandon
Susan Sarandonasal
2024-11-18 03:57:02465semak imbas

What Happens to Variable Memory After Its Scope Ends: Overwritten Immediately or Reserved Until Function Conclusion?

Skop dan Jangka Hayat Pembolehubah: Satu Teka-teki

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

Skop merangkumi bahagian kod di mana pembolehubah boleh diakses. Apabila pembolehubah diisytiharkan dalam pendakap kerinting ({}), skopnya terhad kepada blok kod tertutup.

Seumur hidup

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.

Kelakuan Tidak Ditakrifkan dalam Coretan Kod

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn