节点.JS,C++模块:为什么当我尝试调用本地的长度方法时出现段错误<Array>?



当我从 js 代码调用func()func()调用arr->Length()时,我segfault .

但是有些我在stdout中有奇怪的随机值:283132217, -1222622919, -42974919, -112180935, 997212473, -1412415175.

下面是示例:

#include <node.h>
using namespace v8;
Local<Array> arr = Array::New();
Handle<Value> func(const Arguments &args)
{
    HandleScope scope;
    printf("%dn", arr->Length());
    return scope.Close(Undefined());
}
void init(Handle<Object> target)
{
    target->Set( String::NewSymbol("func"),
                 FunctionTemplate::New(func)->GetFunction() );
}
NODE_MODULE(ctest, init);

我不是 v8 的专家,但我可以解决这样的问题:

Persistent<Array> arr = Persistent<Array>::New(Array::New());

Handle<Value> func(const Arguments &args)
{
    HandleScope scope;
    printf("%dn", arr->Length());
    return scope.Close(Undefined());
}

或者将本地句柄放在函数中:

Handle<Value> func(const Arguments &args)
{
    HandleScope scope;
    Local<Array> arr = Array::New();
    printf("%dn", arr->Length());
    return scope.Close(Undefined());
}

相关内容

  • 没有找到相关文章

最新更新