首页 > 解决方案 > v8 嵌入程序创建 v8::Context 是否有限制?

问题描述

在 MSVC2015 发布模式下,我的程序在 for 循环运行在 680~685 时总是崩溃。以下是我的代码:

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include "libplatform/libplatform.h"
#include "v8.h"
#include <iostream>
#include <string>
    int main(int argc , char* argv[] )
    {
        v8::V8::InitializeICUDefaultLocation(".");
        v8::V8::InitializeExternalStartupData(".");
        std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
        v8::V8::InitializePlatform(platform.get());
        v8::V8::Initialize();
        v8::Isolate::CreateParams create_params;
        create_params.array_buffer_allocator =
            v8::ArrayBuffer::Allocator::NewDefaultAllocator();
        v8::Isolate* isolate = v8::Isolate::New(create_params);
        v8::Isolate::Scope isolate_scope(isolate);
        v8::HandleScope scope(isolate);

        for (int i = 0; i < 1000; ++i) {
            printf("loop %d\n", i);

            v8::Local<v8::Context> tempContext = v8::Context::New(isolate);//
            v8::Context::Scope context_scope(tempContext);
            v8::TryCatch try_catch(isolate);
            std::string debugScript = "let b=1;";

            v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, debugScript.c_str(),
                v8::NewStringType::kNormal).ToLocalChecked();
            v8::Local<v8::Script> script = v8::Script::Compile(tempContext, source).ToLocalChecked();
            script->Run(tempContext).ToLocalChecked();// crash in loop 680~685
        }
      return 0;
      } 

在此处输入图片描述 为什么代码总是同时崩溃?

标签: c++v8embedded-v8

解决方案


推荐阅读