[问题] MFC 出现暂存太小的问题

楼主: smvenjoy (好好坏坏~~)   2021-05-16 16:17:52
想请问大家,最近使用visual studio 2010 跑MFC的程式(Windows),出现
File:f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c
Line:244
Expression:(“Buffer too small”,0)的错误,
想请问大家是否有相关的解决经验?因为程式不是马上当掉,也不一定每次跑很久都会发
生,或者有什么简单的case就可以模拟出这个错误讯息?
有上网查了一下可能的原因,并依照网络上的作法,写了两种简短的code想刻意制造出该
错误讯息,但都无法重现错误讯息,皆可正常跑,如下:
ex1:
CString str1;
char P[20];
str1.Format(“%s”,P);
ex2:
CString str2=“someData”;
str2.Format(“%s”,str2);
想请问有没有更好的想法或建议,
谢谢!
作者: petercoin (彼得币)   2021-05-16 16:57:00
程式码不贴出来大家只能通灵...
作者: stupid0319 (征女友)   2021-05-16 16:58:00
单纯是第二个size参数太小而已吧
作者: kobe8112 (小B)   2021-05-17 08:42:00
通常这种时候就是检查244行,看看设定大小有无错误
作者: LPH66 (-6.2598534e+18f)   2021-05-17 16:55:00
然而这里的 244 行是 CRT 的程式码不是原 PO 的
作者: F04E (Fujitsu)   2021-05-20 09:04:00
没贴程式码是要大家通灵暱
作者: WPC001 (好闷, 迷惘~~)   2021-05-21 22:00:00
vsprintf跟MFC一点关系都没有吧... 基本除错能力都没有?是要当伸手牌就对了吗?
楼主: smvenjoy (好好坏坏~~)   2021-05-24 12:29:00
不是要当伸手牌,是因为不知道错误是出现在哪,才没办法贴出程式码,个人也想过自己用简单的程式码做模拟,但就是模拟不出一样的错误,还是说上面的各位,有办法用几行程式码模拟出该错误吗,谢谢!
作者: petercoin (彼得币)   2021-05-24 16:01:00
你看一下那个244行是哪个function里面的然后看看自己的程式在哪里有呼叫到,再去确认看看BUFFER size是不是可能出问题吧
楼主: smvenjoy (好好坏坏~~)   2021-05-24 16:51:00
楼上,244行不是function里面的,是系统跳出来的XD
作者: kobe8112 (小B)   2021-05-24 17:09:00
是否有将CHAR*使用Format转换成CString的程式码片段?
作者: Lipraxde (Lipraxde)   2021-05-24 18:48:00
MFC 没有 backtrace?
作者: petercoin (彼得币)   2021-05-24 21:01:00
原po我知道那是系统跳出来的啦,可是看起来看得到source code?可以的话就有机会追是哪个地方出差错
作者: LPH66 (-6.2598534e+18f)   2021-05-25 15:14:00
“系统跳出来的”更正确的说是“系统 library 的程式码”死在这里面 99.9% 机会都是用 library 的地方出错那去看系统 library 的程式码对找出问题没有帮助要从那里追只能在除错模式下从错误堆叠回追反过来说, 如果原 PO 有办法拿到错误发生时的呼叫堆叠去看这堆叠当中最上面在你的程式里的地方, 从那里追这通常不会是堆叠最开头一两个项目, 所以要稍微看一下
作者: petercoin (彼得币)   2021-05-25 17:39:00
谢谢L大指正~
作者: newking761 (J三小)   2021-05-26 12:43:00
我先绑红布,等等我

Links booklink

Contact Us: admin [ a t ] ucptt.com