[問題] 中央堆疊記憶體配置與釋放
int *f(int x)
{
int y;
y = x + 10;
return &y;
}
int g(int y)
{
int x;
x = y – 10;
return x;
}
void main( )
{
int *x, y;
x = f(10);
y = g(*x);
printf(“%d %d\n”, *x, y);
}
這是一題國考考題
出現兩種版本的答案
版本一:函數所使用的變數型態與數量一樣,記憶體會配置到同樣的位置
所以f跟g的區域變數共用相同記憶體位址 主程式的指標x當f執行結束跟著執行g時
會指到g當中的區域變數x 印出結果10 10
版本二:副程式執行結束後所屬記憶體會被釋放 因此主程式中的x變成懸疑指標
指像什麼東西變成不知道,至於兩個副程式的區域變數共用到相同記憶體只能說有可能
但不是鐵律 印出結果 不確定 不確定(因為x後來指到的是系統記憶體 不確定內容)
http://ppt.cc/940~ 這是某位補習班老師的解答,也就是版本二
至於版本一我是參考一本補習班出的 胡世雄 程式語言得參考書
自己用dev c++跑的確是10 10,兩個副程式的區域變數也的確共用相同記憶體位址
但自己以往所學的確是版本二比較合理
這是國考非選 所以沒有標準答案 也不知道當初怎樣的答案會拿分....
這是我覺得國考很黑箱的一個地方Orz...........
請教各位版友對這種題目見解 究竟怎樣才是對的
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.172.99.6
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1397709257.A.43F.html
→
04/17 12:42, , 1F
04/17 12:42, 1F
→
04/17 12:43, , 2F
04/17 12:43, 2F
→
04/17 12:44, , 3F
04/17 12:44, 3F
→
04/17 12:45, , 4F
04/17 12:45, 4F
→
04/17 12:46, , 5F
04/17 12:46, 5F
→
04/17 12:47, , 6F
04/17 12:47, 6F
→
04/17 12:48, , 7F
04/17 12:48, 7F
→
04/17 12:48, , 8F
04/17 12:48, 8F
→
04/17 12:49, , 9F
04/17 12:49, 9F
→
04/17 12:49, , 10F
04/17 12:49, 10F
→
04/17 12:51, , 11F
04/17 12:51, 11F
→
04/17 12:51, , 12F
04/17 12:51, 12F
→
04/17 12:53, , 13F
04/17 12:53, 13F
→
04/17 12:55, , 14F
04/17 12:55, 14F
→
04/17 12:55, , 15F
04/17 12:55, 15F
→
04/17 12:56, , 16F
04/17 12:56, 16F
推
04/17 13:38, , 17F
04/17 13:38, 17F
→
04/17 13:44, , 18F
04/17 13:44, 18F
推
04/17 15:33, , 19F
04/17 15:33, 19F
推
04/17 16:33, , 20F
04/17 16:33, 20F
→
04/17 17:51, , 21F
04/17 17:51, 21F
→
04/17 17:56, , 22F
04/17 17:56, 22F
→
04/17 17:56, , 23F
04/17 17:56, 23F
→
04/17 17:57, , 24F
04/17 17:57, 24F
→
04/17 17:57, , 25F
04/17 17:57, 25F
※ 編輯: Sunofgod (218.164.90.184), 04/17/2014 17:58:28
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
3
25
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章