[問題] 遞迴呼叫函數發生存取違規!?

看板C_and_CPP (C/C++)作者 (我的帥,在於臉)時間5年前 (2020/07/24 15:30), 5年前編輯推噓3(3015)
留言18則, 10人參與, 5年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) visual studio 2017 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) c 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) stdio.h stdlib.h string.h 問題(Question): 發生存取違規 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) char *first(char target[512][512],bool check[],int n) 補充說明(Supplement): 在這個函數當中,有遞迴呼叫自己, 然而並不是無限迴圈,因為輸入的資料不會使他有無限迴圈的存在 而在逐步測試的時候, 在main中第一次call他,可以進去; 進去之後,再call一次還是可以繼續; 而這次再call的時候,就會發生這個問題 https://i.imgur.com/btR6Y86.jpg
發生的程式碼片段就是在執行"char *first(char target[512][512],bool check[],int n)"時 然後跳到 https://i.imgur.com/efwYnOU.jpg
才出現存取違規 怎麼會這樣!? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.110.55 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1595575818.A.7A5.html

07/24 15:45, 5年前 , 1F
請貼程式碼,我們沒有水晶球
07/24 15:45, 1F
https://ideone.com/juWfu6 學校作業的 ※ 編輯: ericerix (101.10.110.55 臺灣), 07/24/2020 15:57:27

07/24 16:43, 5年前 , 2F
不知道26萬會不會爆 但是太大是會爆的
07/24 16:43, 2F

07/24 16:44, 5年前 , 3F
摁..你多次迴圈應該是爆了吧 你配少一點
07/24 16:44, 3F
感謝~我也有想過是不是記憶體配大,但我以為現代的電腦hold的住XDD ※ 編輯: ericerix (101.10.110.55 臺灣), 07/24/2020 17:02:21

07/24 17:17, 5年前 , 4F
沒有,單純是windows編出來的程式預設stack很小
07/24 17:17, 4F

07/24 17:28, 5年前 , 5F
先把函式裡的char rule[512][512];改成動態配置
07/24 17:28, 5F

07/24 17:48, 5年前 , 6F
這個陣列空間如二樓所說的是 26 萬 (256K)
07/24 17:48, 6F

07/24 17:48, 5年前 , 7F
stack 一般不會配太大, 所以這種量的區域變數很快就會爆
07/24 17:48, 7F

07/24 23:42, 5年前 , 8F
碰觸到kernel memory了吧
07/24 23:42, 8F

07/25 00:26, 5年前 , 9F
樓上的 kernel memory 指的是 kernel space?
07/25 00:26, 9F

07/25 09:38, 5年前 , 10F
這個參數傳法很有問題吧
07/25 09:38, 10F

07/27 23:21, 5年前 , 11F
跟什麼現代電腦沒關係,先讀點OS吧
07/27 23:21, 11F

07/29 22:40, 5年前 , 12F
請愛用動態配置,系統沒這麼多堆疊給你用
07/29 22:40, 12F

07/31 11:22, 5年前 , 13F
user space你寫的在離譜也不可能那麼簡單碰到kernel sp
07/31 11:22, 13F

07/31 11:22, 5年前 , 14F
ace,所有user space的memory都是virtual的
07/31 11:22, 14F

07/31 11:23, 5年前 , 15F
可以參考一下保護模式的運作原理
07/31 11:23, 15F

07/31 11:24, 5年前 , 16F
kernel memory不可能map給user space app,真有的話那
07/31 11:24, 16F

07/31 11:24, 5年前 , 17F
就是kernel bug了,可以直接去kernel.org report
07/31 11:24, 17F

07/31 11:26, 5年前 , 18F
更不會有你隨便寫寫就能碰到kernel memory的事情
07/31 11:26, 18F
文章代碼(AID): #1V6euAUb (C_and_CPP)
文章代碼(AID): #1V6euAUb (C_and_CPP)