所以我一直有生產中的問題,似乎通過服務包升級公開。它似乎是某種ado _ConnectionPtr對象的Execute方法中的某種緩衝區溢出。以下代碼是什麼產生緩衝區溢出:vc6 ado執行緩衝區溢出
char szStatement[600];
sprintf(szStatement, "UPDATE ROUTING_MASTER SET CNTNR_WGT_EST = %g WHERE CNTNR_ID = '%s'",
spLineItem->CntnrItemsWeight, (LPCTSTR) spLineItem->ContainerID);
m_spCN->Execute(szStatement,&var,adCmdText);
它踐踏我的成員變量(_bstr_t)和應用程序試圖訪問它拋出異常的踐踏成員變量的下一個時間的一個執行方法之後。我可以告訴它的被踐踏,因爲我有我的成員變量在監視窗口和執行方法完成立刻之後我看到成員變量發生了變化(m_bstrDate):
VAR在頭文件中聲明如:
variant_t var;
BOOL m_bUseStorePutCntnr;
_bstr_t m_bstrDate, m_bstrTime;
這樣看來,分配給&變種是什麼做的,因爲如果我把它更改爲以下不踐踏我的成員變量:
m_spCN->Execute(szStatement, NULL, adCmdText);
我不確定這是否與服務包有關,因爲我在開發環境中看到了這一點,並且Visual Studio在下次必須訪問該成員變量時纔會繼續前進。
任何想法爲什麼這會導致緩衝區溢出?
嗯,你正在使用'sprintf',它不檢查緩衝區大小,緩衝區溢出是否會導致這種情況? – sashoalm
它似乎不是當我調試它的szStatement的大小看起來不錯。看起來是正確的空終止和小於600字節(szStatement的大小)。我還在上面添加了szStatement的聲明。 –