Следует упомянуть, что я понимаю, что такое двойное освобождение, будучи C++, когда есть попытка освободить память дважды, но поскольку Java, это невозможно контролировать.
У меня есть следующий метод:
Код: Выделить всё
private static Mat imageToMat(BufferedImage sourceImg) throws IOException {
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
ImageIO.write(sourceImg, "jpg", byteArrayOutputStream);
return Imgcodecs.imdecode(new MatOfByte(byteArrayOutputStream.toByteArray()), Imgcodecs.IMREAD_COLOR);
} catch (IOException e) {
throw new IOException(e);
}
}
free(): обнаружено двойное освобождение в tcache2.
Я разобрался с этим и определил, что это не проблема с ImageIO (я удалил ее и проделал некоторые базовые манипуляции с буферизованным изображением, и оно выдает то же сообщение.
Я работал над этим и определил, что это не проблема с ImageIO (я удалил это и проделал некоторые базовые манипуляции с буферизованным изображением, и оно выдает то же сообщение.
Я работал над этим и определил, что это не проблема с ImageIO) p>
Некоторые вещи стоят того упоминание об этой среде.
Этот метод отлично работает в среде Windows 11/10/7.
Это происходит в Ubuntu 22.04.3 LTS. (на виртуальной машине).
Моя первая мысль заключалась в том, что это, вероятно, проблема с версией openjdk, установленной на виртуальной машине, поэтому я попытался перейти на OpenJDK с 19 по 23 (обратите внимание, что в винде это openjdk 20, который работает нормально).
Обратите внимание, что у меня нет другой доступной среды Ubuntu за пределами виртуальной машины (что, как я начинаю подозревать, связано с какой-то проблемой графики/ускорения, но Думаю, на данный момент я хватаюсь за соломинку.
Кто-нибудь видел что-нибудь подобное при работе с BufferedImages?
Подробнее здесь: https://stackoverflow.com/questions/792 ... feredimage