[英]Is it possible to use a variable from if block outside of that if block?
[英]Access the memory of a auto variable inside a block from outside the block?
在我看來,塊中的auto變量在跳轉到外部范圍后會被釋放。 然后我寫了一個程序來測試這個,令我驚訝的是,它運行正常。 它甚至跑了好幾次。
該計划是:
#include <stdio.h>
int main(int argc, char **argv)
{
int *a = 0;
{
int b = 2;
a = &b;
}
printf("%d\n", *a);
return 0;
}
打印結果是2,這是怎么發生的?
根據ANSI標准,塊的自動變量“b”外側的任何引用都是無效的。 它取決於編譯器,它們如何在堆棧幀上推送和彈出局部變量。 可能你的編譯器在從最外面的塊退出時彈出所有本地。
即使它不在堆棧上,您也可以讀取地址。 如果堆棧進一步增長,則該地址可能會被其他變量修改。 在這種情況下,您將無法再次讀取相同的數據。
這完全取決於編譯器如何實現它? 根據標准,您不能使用任何本地數據類型在其延遲的范圍內。
自動變量的范圍可以分為以下幾類:
根據聲明的位置,它可以具有不同的“可見性”。
在您的代碼中,變量“b”僅在其范圍內可見。 它可以分配內存,並可以在該范圍內使用。 在外面時,該內存不再與變量“b”相關聯。
但是,這並不意味着它被釋放。 如果聲明另一個變量或塊,它可能使用相同的內存位置。
您可以添加一些打印件並檢查正在引用的內存。 這會讓你更好地理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.