看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) WIN10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VS2017 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 堆疊為主緩衝區的滿溢 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式無法順利跑完 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) 補充說明(Supplement): 各位前輩好 小弟想要把一個大型程式從VS2003升到VS2017 由於這個程式經手人很多 所以程式有點大且有點雜 目前做法是在VS2017建構在一個一個問題解決 編譯及鏈結問題已解決但在程式運行時遇到堆疊溢位的問題 (之前在VS2003是不偵錯執行,但在VS2017不偵錯執行會直接關閉程式所以改用偵錯執行) 因為時間上的關係重寫是不太可能了 且小弟功力不足所以重構上也需要花很多時間 想詢問各位前輩如果遇到這種問題會怎麼解決 再請各位前輩給小弟一點方向 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.200.146 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1534907998.A.3A6.html
bluesoul: 增加stack size 08/22 11:37
前輩您好 這個部份我有嘗試將堆疊及堆積設定為1000000 不過仍會發生溢位 ※ 編輯: asdfg1597860 (59.127.200.146), 08/22/2018 14:09:34
block: 看一下/GS 參數說明,就懂原因了,修bug吧 08/22 14:17
前輩您好 現在我的想法也是抓bug 不過溢位的地方無跡可尋 目前猜測是程式指標回傳時找不到位置或是靜態記憶體配置太多(因為是C/C++語言寫的) ※ 編輯: asdfg1597860 (59.127.200.146), 08/22/2018 17:04:05 yamakazi: 你記憶體多大? 嵌入式比較容易overflow吧 前輩您好 程式是Base在window上喔 用MFC及C&C++寫成的
bluesoul: stack爆掉和malloc或是new無關,recursive太多層了 08/22 19:09
前輩您好 我目前偵錯模式運作下他會在某個函式中表示溢位,但這函式裡沒有recursive 只有MFC 中的Domodal函式 ※ 編輯: asdfg1597860 (59.127.200.146), 08/23/2018 10:00:03
LPH66: 你在偵錯模式應該能看到呼叫堆疊, 看裡面有沒有一堆函數 08/23 17:30
LPH66: 遞迴太多層的狀況會在裡面看到一個出現很多次的函數 08/23 17:31
LPH66: 那裡就是你的問題所在 08/23 17:31
https://imgur.com/a/BDRQNB9 附上我部份程式及溢位資訊,呼叫堆疊只有在溢位時才會出現訊息
descent: 有沒有開很大的 array 區域變數 08/23 17:33
目前能確定的有宣告大小為1024的char array ※ 編輯: asdfg1597860 (59.127.200.146), 08/27/2018 09:22:09
sarafciel: 看起來不是stack炸掉 是超寫到DEP的barrier上去了 08/27 09:43
sarafciel: 你在OnLesson開頭多宣告一個大一點char Array試試 08/27 09:47
前輩您好 這是OnLesson的程式 https://imgur.com/a/NXv15OF 這函式用來作流程控管 另外我嘗試前加入輩說OnLesson開頭宣告Array char buf[1024] 狀況會一樣 ※ 編輯: asdfg1597860 (59.127.200.146), 08/27/2018 11:19:29