首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NPN_MemFree将返回的数据返回给Google Chrome后的NPN_MemAlloc

NPN_MemFree将返回的数据返回给Google Chrome后的NPN_MemAlloc
EN

Stack Overflow用户
提问于 2010-09-14 16:42:57
回答 1查看 536关注 0票数 1

我已经完成了我的NPAPI插件,它在Google Chrome中工作得很好,但是有一个奇怪的问题。问题是我在插件中编写了一个方法,该方法将一个字符串返回给浏览器。为此,您必须在浏览器中分配内存,并将生成的字符串复制到其中。类似于:

代码语言:javascript
复制
bool
ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args,
                               uint32_t argCount, NPVariant *result)
{
    if (name == sMethod_id) {
  ...

  //free the memory if it is already allocated
  if (m_pPtr) NPN_MemFree(m_pPtr);

  //allocate the string in the browser memory
  m_pPtr = (char*)NPN_MemAlloc(size+1);
  SecureZeroMemory(m_pPtr, size+1);
  memcpy(m_pATR, string, size);

  //send result to browser
  STRINGZ_TO_NPVARIANT(m_pPtr, *result);

  return true;
 }
  ...

}

请注意,“m_pPtr”是类的数据成员,在构造时被初始化为NULL。当我从Google Chrome调用这个方法两次时,问题就出现了。第一次它工作得很好。从第二次开始以此类推,它会返回一个在浏览器中显示为'X‘的垃圾值。我在Firefox中测试了相同的插件,它工作得很好,无论我调用该方法多少次,它都会返回正确的值。但是当我关闭加载插件的页面时,Firefox崩溃了。

任何关于在这种奇怪的情况下会发生什么的建议都是值得感谢的。我正在处理它,一旦我找到任何有用的信息,我就会更新这个帖子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-22 06:43:50

您需要删除以下行:

代码语言:javascript
复制
if (m_pPtr) NPN_MemFree(m_pPtr);

您将字符串返回给脚本,调用者(在本例中是浏览器的JavaScript引擎)拥有它。

如果您释放它,这将导致undefined behaviour,因为内存可能仍在使用中,或者已经被浏览器重用或释放。

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

https://stackoverflow.com/questions/3707288

复制
相关文章

相似问题

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