Svg中的image标签读取位图造成的内存泄露问题

具体情况为,在一个循环中或者是多个输入与输出的程序,如下面的例子

int main(void) {
    auto doc{ System::MakeObject<Aspose::Words::Document>() };

    auto builder{ System::MakeObject<Aspose::Words::DocumentBuilder>(doc) };

    while (true) {
        printf("Waiting for input\n");
        auto _ { getchar() }; // Waiting for input
        auto shape{ builder->InsertImage(u"Input.svg") };
        shape->get_ImageData()->Save(u"Output.jpg");
    }

    return 0;
}

shape的每次操作离开了作用域内存不会被完整的释放

如何解决这个内存泄露问题呢

下面我将提供自己的C++源代码和svg以及素材
source.zip (63.9 KB)

@BingAlpha, 这是预期的行为。 使用 DocumentBuilder 将图像形状插入到 Document 对象后,Document 对象将具有指向图像形状对象的指针。

要释放图像形状内存,您需要从 Document 对象中删除图像形状,或者为每次转换创建一个新的 Document 对象和 DocumentBuilder。

1 Like