[問題] 請教C array的一個問題

看板C_and_CPP作者 (~只愛Leah Dizon~)時間11年前 (2012/11/16 16:05), 編輯推噓0(0011)
留言11則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCB on Windows Dear all 想跟大家討論一個問題 請問以下為何還可以執行? 小弟在BCB上面編code 寫tool 今天才發現自己宣告一個buffer array才4096個 buf array是用來放data到一塊memory table UI裡面 char buf[4096] 但是卻可以access超過4095 for(i=0;i<8192;i++) buf[i] ----> 居然沒事??? 照理說buf[4096]~buf[8191]就會出問題 但是居然都沒有出現錯誤 而且tool可以正常使用 我檢查過超過4096之後的值都還顯示正確 目前還無法理解為什麼沒有出錯 是BCB compiler有動什麼手腳讓我這樣寫不會出錯嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 42.78.229.190

11/16 16:06, , 1F
你跟房東租了4096間房間,硬是要住8192間的話其實不會管
11/16 16:06, 1F

11/16 16:07, , 2F
不過後面不屬於你的房間,本來有什麼東西,有沒有別人住
11/16 16:07, 2F

11/16 16:07, , 3F
就這麼搬進去會有什麼後果,就是自己要承擔的了....
11/16 16:07, 3F

11/16 16:14, , 4F
你的程式開始執行的時後會跟作業系統要一塊空間
11/16 16:14, 4F

11/16 16:15, , 5F
(1MB之類的,看設定) 你之後記憶體如果不用new或malloc
11/16 16:15, 5F

11/16 16:16, , 6F
都是重複利用這塊空間(stack)
11/16 16:16, 6F

11/16 16:16, , 7F
所以如果你不超過一開始stack的大小
11/16 16:16, 7F

11/16 16:17, , 8F
作業系統就無從得知你是怎樣亂搞
11/16 16:17, 8F

11/16 16:18, , 9F
4097~8192都是鬼屋
11/16 16:18, 9F

11/16 16:19, , 10F
你可以實驗看看要超出多少才會出事
11/16 16:19, 10F

11/16 16:21, , 11F
或是看看int a[10];int b[10];改超過a b會怎樣
11/16 16:21, 11F
文章代碼(AID): #1GfVEv_i (C_and_CPP)