首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果事先不调用VariantClear,那么VariantInit有可能崩溃吗?

如果事先不调用VariantClear,那么VariantInit有可能崩溃吗?
EN

Stack Overflow用户
提问于 2022-04-04 21:59:27
回答 1查看 169关注 0票数 0

我有一个很难复制的异常,但我强烈怀疑它发生在VariantClear()期间。

我有一个函数,它定义一个变量,然后将它传递给另一个变量,而不首先调用它上的VariantInit()。被调用的函数然后对这个变体调用VariantClear(),这可能是异常的来源。

代码语言:javascript
运行
复制
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()会阻止此异常发生吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-04 22:37:45

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

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

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71744209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档