我有一个很难复制的异常,但我强烈怀疑它发生在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() in Func1()会阻止此异常发生吗?
发布于 2022-04-04 22:37:45
VariantClear检查VARIANT的前16位以找到变体类型。
根据类型的不同,VariantClear可能会调用CoTaskMemFree,或者将变量视为调用Release的COM指针。如果类型无效,您可能会崩溃或释放一些不相关的内存。
如果类型是VT_EMPTY、VT_NULL或数字类型,那么它只是将所有字段设置为零。
如果不初始化VARIANT,则类型是未定义的,它可能是以前操作中内存中的任何值。因此,必须首先在VariantInit上调用VARIANT。
https://stackoverflow.com/questions/71744209
复制相似问题