看板 C_and_CPP 關於我們 聯絡資訊
想請問大家,最近使用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
petercoin: 程式碼不貼出來大家只能通靈...05/16 16:57
stupid0319: 單純是第二個size參數太小而已吧05/16 16:58
kobe8112: 通常這種時候就是檢查244行,看看設定大小有無錯誤05/17 08:42
LPH66: 然而這裡的 244 行是 CRT 的程式碼不是原 PO 的05/17 16:55
F04E: 沒貼程式碼是要大家通靈暱05/20 09:04
WPC001: vsprintf跟MFC一點關係都沒有吧... 基本除錯能力都沒有?05/21 22:00
WPC001: 是要當伸手牌就對了嗎?05/21 22:00
smvenjoy: 不是要當伸手牌,是因為不知道錯誤是出現在哪,才沒辦法05/24 12:29
smvenjoy: 貼出程式碼,個人也想過自己用簡單的程式碼做模擬,但就05/24 12:29
smvenjoy: 是模擬不出一樣的錯誤,還是說上面的各位,有辦法用幾05/24 12:29
smvenjoy: 行程式碼模擬出該錯誤嗎,謝謝!05/24 12:29
petercoin: 你看一下那個244行是哪個function裡面的05/24 16:01
petercoin: 然後看看自己的程式在哪裡有呼叫到,再去確認看看BUFFE05/24 16:02
petercoin: R size是不是可能出問題吧05/24 16:02
smvenjoy: 樓上,244行不是function裡面的,是系統跳出來的XD 05/24 16:51
kobe8112: 是否有將CHAR*使用Format轉換成CString的程式碼片段?05/24 17:09
Lipraxde: MFC 沒有 backtrace?05/24 18:48
※ 編輯: smvenjoy (122.116.58.107 臺灣), 05/24/2021 20:07:15
petercoin: 原po我知道那是系統跳出來的啦,可是看起來看得到 05/24 21:01
petercoin: source code?可以的話就有機會追是哪個地方出差錯 05/24 21:01
LPH66: 「系統跳出來的」更正確的說是「系統 library 的程式碼」 05/25 15:14
LPH66: 死在這裡面 99.9% 機會都是用 library 的地方出錯 05/25 15:14
LPH66: 那去看系統 library 的程式碼對找出問題沒有幫助 05/25 15:14
LPH66: 要從那裡追只能在除錯模式下從錯誤堆疊回追 05/25 15:15
LPH66: 反過來說, 如果原 PO 有辦法拿到錯誤發生時的呼叫堆疊 05/25 15:19
LPH66: 去看這堆疊當中最上面在你的程式裡的地方, 從那裡追 05/25 15:20
LPH66: 這通常不會是堆疊最開頭一兩個項目, 所以要稍微看一下 05/25 15:20
petercoin: 謝謝L大指正~ 05/25 17:39
newking761: 我先綁紅布,等等我 05/26 12:43