作者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/cn.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