0

嗨,当我在 argv [1] 上执行检查时,下面的代码会崩溃。请帮助修复它,在将值分配给 argv[1] 时,我需要检查 bool 变量checktrue是否为 true 分配字符串值,否则分配 int 值,如下代码所示。

void DispatchEventWorker::HandleOKCallback() {
  v8::Local<v8::Value> argv[2];
    argv[0]= Nan::New<v8::String>(structdata.value1).ToLocalChecked();

if(checktrue)
     {
             argv[1] = Nan::New<v8::Number>(structdata.value2).ToLocalChecked();

     }
else
 {
          argv[1] = Nan::New<v8::String>(structdata.value3);
 }
  callback->Call(2, argv);
}

注意输出:进程 123432098(节点)终止 SIGSEGV 代码=1 fltno=11 ip=0000000001076a08(/usr/lib/ldqnx-64.so.2@memcpy+0x0000000000000048) mapaddr=0000000000076a08。参考=2073696874206f74

4

1 回答 1

1

首先,我建议您始终async_resource在回调 JS 时包含,否则某些 Node.js 功能将不起作用:

this->callback->Call(2, argv, this->async_resource);

然后,您的代码缺少.ToLocalChecked()onargv[1]并且无法以其当前形式编译。

否则,它根本没有任何问题,而且很可能崩溃与 Node.js 无关——也许这些值之一是空指针。

于 2021-11-26T00:17:11.310 回答