当我从 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());
}