我有以下程序:存儲位置進行訪問,甚至在函數調用結束
// This is with ** int r = 99; ** line commented
[email protected] (~/psets/pset5/pset5_test): ./PointerAddresss
Value of x is 2 and its address is 0xbfdba7c4
Value of y is 33 and its address is 0xbfdba794
[email protected] (~/psets/pset5/pset5_test): size PointerAddresss
text data bss dec hex filename
1250 280 4 1534 5fe PointerAddresss
// This is with ** int r = 99; ** line un-commented
[email protected] (~/psets/pset5/pset5_test): ./PointerAddresss
Value of x is 2 and its address is 0xbf8a98e4
Value of y is 33 and its address is 0xbf8a98b4
[email protected] (~/psets/pset5/pset5_test): size PointerAddresss
text data bss dec hex filename
1266 280 4 1550 60e PointerAddresss
[email protected] (~/psets/pset5/pset5_test):
:
#include <stdio.h>
#include <stdlib.h>
int* testPointerReturnType();
int main(void)
{
int x = 2;
printf("Value of x is %d and its address is %p\n", x, &x);
int* y = testPointerReturnType();
printf("Value of y is %d and its address is %p\n", *y, y);
}
int* testPointerReturnType()
{
int x = 33;
int r = 99;
return &x;
}
下面是我的總體O/P(我將在我的問題下面來討論這個問題)
下面是我的問題:
- 我返回一個局部變量的內存地址,但我仍能夠訪問LOCAT之後,該功能完成執行後。怎麼樣?內存位置是否有可能保留該值並且尚未被覆蓋。這意味着如果我的程序只調用了一個函數,並且該函數正在返回一個內存地址,那麼我仍然可以訪問局部變量的內存地址並獲得相同的確切值,因爲沒有調用其他函數?
- 如果我保留
int r = 99;
作爲評論,然後我得到1250
在文本和dec。如果我取消註釋,那麼我得到1266
,這基本上意味着增加16個內存位置,但爲什麼增加16個內存位置時爲4個字節的int?此外,我知道文本/代碼段然後什麼是dec
?
你爲什麼會認爲CPU週期會浪費在擦除從堆棧中彈出的清除內存?數據仍然存在,直到被覆蓋,但它是未定義的行爲,試圖訪問它。 –
@JohnColeman這就是我也想過的,但我不確定,筆記/教程不清楚指出。我的第二個問題呢? – hagrawal
我認爲@ DavidHoelzer的回答指出了你的第二個問題 –