如果事先没有调用VariantUnit,VariantClear是否可能使软件崩溃



我有一个无法轻易复制的异常,但我强烈怀疑它发生在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()会抛出异常吗?在Func1()中调用VariantInit()会阻止此异常发生吗?

VariantClear检查VARIANT的前16位以查找变体类型。

根据类型的不同,VariantClear可能会调用CoTaskMemFree,或者将变体视为调用Release的COM指针。如果类型无效,则可能会崩溃或释放一些不相关的内存。

如果类型是VT_EMPTYVT_NULL或数字类型,它只会将所有字段设置为零。

如果不初始化VARIANT,则类型未定义,它可以是以前操作中留在内存中的任何值。因此,您必须首先在VARIANT上调用VariantInit

相关内容

  • 没有找到相关文章

最新更新