作者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