首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QuickJS:修改函数原型可能导致内存泄漏

QuickJS:修改函数原型可能导致内存泄漏
EN

Stack Overflow用户
提问于 2021-05-27 04:29:33
回答 1查看 66关注 0票数 0

我在QuickJS JavaScript引擎中遇到了一个似乎是错误的东西。我已经提交了一个GitHub issue,但我也在这里询问是否可能是用户错误,和/或找出其他人是否遇到过类似的问题。

下面是测试代码:

代码语言:javascript
复制
#include <string>
#include "quickjs.h"

int main() {
    auto runtime = JS_NewRuntime();
    auto context = JS_NewContext(runtime);

    std::string source =
        "function foo() {}\n"
        "foo.prototype.bar = function() {};";
    JS_Eval(context, source.c_str(), source.size(), "", JS_EVAL_TYPE_GLOBAL);

    JS_FreeContext(context);
    JS_FreeRuntime(runtime);
}

生成断言:

代码语言:javascript
复制
Assertion failed: (list_empty(&rt->gc_obj_list)), function JS_FreeRuntime

使用“转储泄漏”功能会输出以下内容:

代码语言:javascript
复制
Object leaks:
       ADDRESS REFS SHRF          PROTO      CLASS PROPS
   0x1071d4bc0    1   0*    0x1071c5510   Function { length: 0, name: 14'', prototype: [autoinit 0x1071c4e80 0 0x0] }

这似乎表明修改函数原型会导致内存泄漏。(如果函数原型未修改,则不会发生这种情况。)

我的测试代码有什么明显的错误吗?也许是API的误用?如果没有,还有没有其他人遇到过这个问题或QuickJS的类似问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-30 03:41:43

对于将来可能会发现这一点的任何人来说,这是由于不正确的API使用造成的。泄漏不是由于JavaScript代码本身造成的,而是因为JS_Eval()返回了一个JSValue,需要使用JS_FreeValue()来释放它。

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

https://stackoverflow.com/questions/67712306

复制
相关文章

相似问题

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