[問題] MFC 出現暫存太小的問題

看板C_and_CPP (C/C++)作者 (好好壞壞~~)時間5年前 (2021/05/16 16:17), 5年前編輯推噓3(4123)
留言28則, 9人參與, 最新討論串1/1
想請問大家,最近使用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

05/16 16:57, 5年前 , 1F
程式碼不貼出來大家只能通靈...
05/16 16:57, 1F

05/16 16:58, 5年前 , 2F
單純是第二個size參數太小而已吧
05/16 16:58, 2F

05/17 08:42, 5年前 , 3F
通常這種時候就是檢查244行,看看設定大小有無錯誤
05/17 08:42, 3F

05/17 16:55, 5年前 , 4F
然而這裡的 244 行是 CRT 的程式碼不是原 PO 的
05/17 16:55, 4F

05/20 09:04, , 5F
沒貼程式碼是要大家通靈暱
05/20 09:04, 5F

05/21 22:00, , 6F
vsprintf跟MFC一點關係都沒有吧... 基本除錯能力都沒有?
05/21 22:00, 6F

05/21 22:00, , 7F
是要當伸手牌就對了嗎?
05/21 22:00, 7F

05/24 12:29, , 8F
不是要當伸手牌,是因為不知道錯誤是出現在哪,才沒辦法
05/24 12:29, 8F

05/24 12:29, , 9F
貼出程式碼,個人也想過自己用簡單的程式碼做模擬,但就
05/24 12:29, 9F

05/24 12:29, , 10F
是模擬不出一樣的錯誤,還是說上面的各位,有辦法用幾
05/24 12:29, 10F

05/24 12:29, , 11F
行程式碼模擬出該錯誤嗎,謝謝!
05/24 12:29, 11F

05/24 16:01, , 12F
你看一下那個244行是哪個function裡面的
05/24 16:01, 12F

05/24 16:02, , 13F
然後看看自己的程式在哪裡有呼叫到,再去確認看看BUFFE
05/24 16:02, 13F

05/24 16:02, , 14F
R size是不是可能出問題吧
05/24 16:02, 14F

05/24 16:51, , 15F
樓上,244行不是function裡面的,是系統跳出來的XD
05/24 16:51, 15F

05/24 17:09, , 16F
是否有將CHAR*使用Format轉換成CString的程式碼片段?
05/24 17:09, 16F

05/24 18:48, , 17F
MFC 沒有 backtrace?
05/24 18:48, 17F
※ 編輯: smvenjoy (122.116.58.107 臺灣), 05/24/2021 20:07:15

05/24 21:01, , 18F
原po我知道那是系統跳出來的啦,可是看起來看得到
05/24 21:01, 18F

05/24 21:01, , 19F
source code?可以的話就有機會追是哪個地方出差錯
05/24 21:01, 19F

05/25 15:14, , 20F
「系統跳出來的」更正確的說是「系統 library 的程式碼」
05/25 15:14, 20F

05/25 15:14, , 21F
死在這裡面 99.9% 機會都是用 library 的地方出錯
05/25 15:14, 21F

05/25 15:14, , 22F
那去看系統 library 的程式碼對找出問題沒有幫助
05/25 15:14, 22F

05/25 15:15, , 23F
要從那裡追只能在除錯模式下從錯誤堆疊回追
05/25 15:15, 23F

05/25 15:19, , 24F
反過來說, 如果原 PO 有辦法拿到錯誤發生時的呼叫堆疊
05/25 15:19, 24F

05/25 15:20, , 25F
去看這堆疊當中最上面在你的程式裡的地方, 從那裡追
05/25 15:20, 25F

05/25 15:20, , 26F
這通常不會是堆疊最開頭一兩個項目, 所以要稍微看一下
05/25 15:20, 26F

05/25 17:39, , 27F
謝謝L大指正~
05/25 17:39, 27F

05/26 12:43, , 28F
我先綁紅布,等等我
05/26 12:43, 28F
文章代碼(AID): #1WeDKo_I (C_and_CPP)
文章代碼(AID): #1WeDKo_I (C_and_CPP)