[問題] 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