看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
firejox: 請貼程式碼,我們沒有水晶球 07/24 15:45
https://ideone.com/juWfu6 學校作業的 ※ 編輯: ericerix (101.10.110.55 臺灣), 07/24/2020 15:57:27
moebear: 不知道26萬會不會爆 但是太大是會爆的 07/24 16:43
moebear: 摁..你多次迴圈應該是爆了吧 你配少一點 07/24 16:44
感謝~我也有想過是不是記憶體配大,但我以為現代的電腦hold的住XDD ※ 編輯: ericerix (101.10.110.55 臺灣), 07/24/2020 17:02:21
nh60211as: 沒有,單純是windows編出來的程式預設stack很小 07/24 17:17
nh60211as: 先把函式裡的char rule[512][512];改成動態配置 07/24 17:28
LPH66: 這個陣列空間如二樓所說的是 26 萬 (256K) 07/24 17:48
LPH66: stack 一般不會配太大, 所以這種量的區域變數很快就會爆 07/24 17:48
joey11121: 碰觸到kernel memory了吧 07/24 23:42
Lipraxde: 樓上的 kernel memory 指的是 kernel space? 07/25 00:26
kaneson: 這個參數傳法很有問題吧 07/25 09:38
cphe: 跟什麼現代電腦沒關係,先讀點OS吧 07/27 23:21
jacky1989: 請愛用動態配置,系統沒這麼多堆疊給你用 07/29 22:40
Killercat: user space你寫的在離譜也不可能那麼簡單碰到kernel sp 07/31 11:22
Killercat: ace,所有user space的memory都是virtual的 07/31 11:22
Killercat: 可以參考一下保護模式的運作原理 07/31 11:23
Killercat: kernel memory不可能map給user space app,真有的話那 07/31 11:24
Killercat: 就是kernel bug了,可以直接去kernel.org report 07/31 11:24
Killercat: 更不會有你隨便寫寫就能碰到kernel memory的事情 07/31 11:26