我有一個無法輕易復制的例外,但我非常懷疑它發生在VariantClear().
我有一個定義變體的函式,然后將其傳遞給另一個變體而不VariantInit()先呼叫它。被呼叫的函式然后呼叫VariantClear()這個變體,這很可能是例外的來源。
void Func1()
{
VARIANT vData;
//VariantInit(&vData); // no variant clear was done. Will adding this line stop the crash below?
Func2(vData);
}
void Func2(VARIANT& vData)
{
// some code here
VariantClear(&vData); <-- this line crashes, why??
// some code here
}
誰能解釋為什么VariantClear()會拋出例外?呼叫會VariantInit()阻止Func1()此例外的發生嗎?
uj5u.com熱心網友回復:
VariantClear檢查 的前 16 位VARIANT以查找變體型別。
根據型別,VariantClear可能會呼叫CoTaskMemFree或將變體視為它呼叫的 COM 指標Release。如果型別無效,您可能會崩潰或釋放一些不相關的記憶體。
如果型別是VT_EMPTY,VT_NULL或數字型別,它只是將所有欄位設定為零。
如果不初始化VARIANT,則型別未定義,它可能是上一次操作留在記憶體中的任何值。因此,您必須先VariantInit呼叫VARIANT.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456512.html
上一篇:如何解決“std::basic_ofstream<char,std::char_traits<char>>::open(std::string&)”
