作者smvenjoy (好好坏坏~~)
看板C_and_CPP
标题[问题] MFC 出现暂存太小的问题
时间Sun May 16 16:17:52 2021
想请问大家,最近使用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);
想请问有没有更好的想法或建议,
谢谢!
--
※ 编辑: smvenjoy (101.10.7.102 台湾), 05/16/2021 16:50:00
1F:→ petercoin: 程式码不贴出来大家只能通灵...05/16 16:57
2F:推 stupid0319: 单纯是第二个size参数太小而已吧05/16 16:58
3F:→ kobe8112: 通常这种时候就是检查244行,看看设定大小有无错误05/17 08:42
4F:推 LPH66: 然而这里的 244 行是 CRT 的程式码不是原 PO 的05/17 16:55
5F:嘘 F04E: 没贴程式码是要大家通灵昵05/20 09:04
6F:→ WPC001: vsprintf跟MFC一点关系都没有吧... 基本除错能力都没有?05/21 22:00
7F:→ WPC001: 是要当伸手牌就对了吗?05/21 22:00
8F:→ smvenjoy: 不是要当伸手牌,是因为不知道错误是出现在哪,才没办法05/24 12:29
9F:→ smvenjoy: 贴出程式码,个人也想过自己用简单的程式码做模拟,但就05/24 12:29
10F:→ smvenjoy: 是模拟不出一样的错误,还是说上面的各位,有办法用几05/24 12:29
11F:→ smvenjoy: 行程式码模拟出该错误吗,谢谢!05/24 12:29
12F:→ petercoin: 你看一下那个244行是哪个function里面的05/24 16:01
13F:→ petercoin: 然後看看自己的程式在哪里有呼叫到,再去确认看看BUFFE05/24 16:02
14F:→ petercoin: R size是不是可能出问题吧05/24 16:02
15F:→ smvenjoy: 楼上,244行不是function里面的,是系统跳出来的XD 05/24 16:51
16F:→ kobe8112: 是否有将CHAR*使用Format转换成CString的程式码片段?05/24 17:09
17F:→ Lipraxde: MFC 没有 backtrace?05/24 18:48
※ 编辑: smvenjoy (122.116.58.107 台湾), 05/24/2021 20:07:15
18F:→ petercoin: 原po我知道那是系统跳出来的啦,可是看起来看得到 05/24 21:01
19F:→ petercoin: source code?可以的话就有机会追是哪个地方出差错 05/24 21:01
20F:推 LPH66: 「系统跳出来的」更正确的说是「系统 library 的程式码」 05/25 15:14
21F:→ LPH66: 死在这里面 99.9% 机会都是用 library 的地方出错 05/25 15:14
22F:→ LPH66: 那去看系统 library 的程式码对找出问题没有帮助 05/25 15:14
23F:→ LPH66: 要从那里追只能在除错模式下从错误堆叠回追 05/25 15:15
24F:→ LPH66: 反过来说, 如果原 PO 有办法拿到错误发生时的呼叫堆叠 05/25 15:19
25F:→ LPH66: 去看这堆叠当中最上面在你的程式里的地方, 从那里追 05/25 15:20
26F:→ LPH66: 这通常不会是堆叠最开头一两个项目, 所以要稍微看一下 05/25 15:20
27F:→ petercoin: 谢谢L大指正~ 05/25 17:39
28F:推 newking761: 我先绑红布,等等我 05/26 12:43