作者asdfg1597860 (Jay)
看板C_and_CPP
標題[問題] 關於C++在VS2017上的溢位
時間Wed Aug 22 11:19:55 2018
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1534907998.A.3A6.html
1F:→ bluesoul: 增加stack size 08/22 11:37
前輩您好 這個部份我有嘗試將堆疊及堆積設定為1000000 不過仍會發生溢位
※ 編輯: asdfg1597860 (59.127.200.146), 08/22/2018 14:09:34
2F:→ 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++寫成的
3F:→ bluesoul: stack爆掉和malloc或是new無關,recursive太多層了 08/22 19:09
前輩您好 我目前偵錯模式運作下他會在某個函式中表示溢位,但這函式裡沒有recursive
只有MFC 中的Domodal函式
※ 編輯: asdfg1597860 (59.127.200.146), 08/23/2018 10:00:03
4F:→ LPH66: 你在偵錯模式應該能看到呼叫堆疊, 看裡面有沒有一堆函數 08/23 17:30
5F:→ LPH66: 遞迴太多層的狀況會在裡面看到一個出現很多次的函數 08/23 17:31
6F:→ LPH66: 那裡就是你的問題所在 08/23 17:31
https://imgur.com/a/BDRQNB9 附上我部份程式及溢位資訊,呼叫堆疊只有在溢位時才會出現訊息
7F:→ descent: 有沒有開很大的 array 區域變數 08/23 17:33
目前能確定的有宣告大小為1024的char array
※ 編輯: asdfg1597860 (59.127.200.146), 08/27/2018 09:22:09
8F:→ sarafciel: 看起來不是stack炸掉 是超寫到DEP的barrier上去了 08/27 09:43
9F:→ 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