我追蹤了我的應用程序中最近發生的一次崩潰,導致堆棧溢出問題,並修復了問題,我想我會重新檢查代碼中是否存在類似的潛在錯誤visual studio代碼分析工具。此發現了一些可能的類似例報告如在模板中發現潛在的堆棧溢出問題
警告C6262函數使用「148140」堆棧的字節數:超過 /分析:STACKSIZE「16384」。考慮將一些數據移動到 堆。 SCCW-VC2015 c:\ cpp \ aclcommon \ aclcontainer.h
當我查看代碼時,它會將我帶到以下模板函數;
template<class TYPE, class ARG_TYPE, class INDEX>
inline INDEX CContainerBase<TYPE, ARG_TYPE, INDEX>::Add(ARG_TYPE newElement)
{
TYPE Temp = newElement;
INDEX nIndex = GetSize();
SetSize(nIndex + 1);
SetAt(nIndex,Temp);
return nIndex;
}
其中有問題的行是TYPE Temp = newElement;
的問題是,我需要找出哪些一段代碼是使用模板容器具有這樣大的元素,作爲模板本身是沒有問題的。無論如何要找出模板的哪個具體實例在這裏使用,即找出TYPE
指的是什麼?
哇,什麼技術! –
謝謝dasblinkenlight,正是我在找的東西。 –
只需爲上面的MSVC用戶添加註釋,您需要查看文本輸出窗口以獲取所需的詳細信息,因爲錯誤列表中的數據是縮寫的,並且不包含TYPE的特定值。 –