Утечка встроенной памяти Google v8 с образцом

Я пытаюсь встроить V8, но у меня есть утечки памяти. Следующий минимальный код воспроизводит утечки.

int main(int argc, char* argv[])
{
    // V8 version 7.1.302.33
    v8::V8::InitializeICUDefaultLocation(argv[0]);
    v8::V8::InitializeExternalStartupData(argv[0]);
    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* pIsolate = v8::Isolate::New(create_params); // If I remove this line and the next one, memory leak disappears
    pIsolate->Dispose();

    v8::V8::Dispose();
    v8::V8::ShutdownPlatform();
    delete create_params.array_buffer_allocator;
}

С этим кодом моя визуальная студия 2017 печатает тезисы на выходе

Detected memory leaks!
    Dumping objects ->
{5565} normal block at 0x000001BA6F417950, 8 bytes long.
    Data: < i    > 00 00 E8 69 18 00 00 00
{5564} normal block at 0x000001BA6F416960, 16 bytes long.
    Data : <8 >o > 38 D7 3E 6F BA 01 00 00 00 00 00 00 00 00 00 00
{5563} normal block at 0x000001BA6F3ED720, 56 bytes long.
    Data: <  >o > o > A0 D6 3E 6F BA 01 00 00 A0 D6 3E 6F BA 01 00 00
{989} normal block at 0x000001BA6F4194E0, 128 bytes long.
    Data: <  >o > o > A0 D6 3E 6F BA 01 00 00 A0 D6 3E 6F BA 01 00 00
{988} normal block at 0x000001BA6F416CD0, 16 bytes long.
    Data: < p `             > 70 B4 60 0A FF 7F 00 00 00 00 00 00 00 00 00 00
{987} normal block at 0x000001BA6F417270, 16 bytes long.
    Data : < X `             > 58 B4 60 0A FF 7F 00 00 00 00 00 00 00 00 00 00
{986} normal block at 0x000001BA6F3ED6A0, 56 bytes long.
    Data : <  >o > o > 20 D7 3E 6F BA 01 00 00 20 D7 3E 6F BA 01 00 00
    Object dump complete.

Так ты знаешь, что я забыл?

Заранее спасибо за помощь ;)


person David    schedule 22.02.2019    source источник
comment
Документация для v8::Isolate::New не показывает перегрузку, принимающую create_params, но поскольку она компилируется, я думаю, она должна существовать. Являются ли те параметры, из-за которых изолят вводится потоком? Изолят не должен вводиться ни одним потоком, чтобы быть одноразовым.   -  person Ted Lyngmo    schedule 22.02.2019
comment
Поверьте, эти документы немного устарели. иметь правильный прототип функции   -  person Neil Gatenby    schedule 22.02.2019
comment
На самом деле этот код представляет собой привет мир V8 в минимальной форме. У меня такая же утечка памяти с полным кодом hello world   -  person David    schedule 22.02.2019


Ответы (1)


Я скопировал ваш код и запустил его в среде Linux с установленным флагом -fsanitize = address, не получил никакой ошибки утечки памяти.

person chunhui li    schedule 13.06.2019
comment
Если есть только на ОС Windows - person David; 14.06.2019