如何使用 C++ 指標從不同的函式訪問區域性變數?
一旦區域性變數超出作用域,就無法訪問它。這就是區域性變數的含義。但是,讓我們來看一個你_可能_能夠在區域性變數的作用域之外訪問其記憶體的例子。
示例
#include<iostream>
int* foo() {
int x = 3;
return &x;
}
int main() {
int* address = foo();
cout << *address;
*address = 12;
cout << *address;
}輸出
這可能給出以下輸出:
3 12
正如我之前提到的,這段程式碼_可能_有效。我們只是讀取和寫入_曾經_是 x 地址的記憶體。在 main 函式中,你位於 foo 函式的作用域之外,該地址是指向某個隨機記憶體區域的指標。在上面的例子中,該記憶體區域確實存在,並且目前沒有任何其他內容正在使用它。繼續使用它不會破壞任何東西(你不會使用另一個程序的記憶體區域或任何其他未授權的記憶體區域),並且還沒有其他內容覆蓋它。因此,3 仍然在那裡。
在一個真實的程式中,該記憶體可能幾乎立即被重新使用,並且你可能會因為這樣做而破壞某些東西。這種記憶體訪問錯誤非常難以跟蹤和修復。
當你從 foo 函式返回時,程式會告訴作業系統 x 的記憶體不再被使用,可以將其重新分配給其他內容。如果你幸運地它被重新分配,並且作業系統沒有發現你再次使用它,那麼你就可以逃脫懲罰。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP