У @HovercraftFullOfEels была небольшая дежа вю и я вспомнил, что раньше я отвечал на очень похожий вопрос;)

        public static User32 USER32_INSTANCE = (User32) Native.loadLibrary("user32", User32.class);

        user32 = USER32_INSTANCE;

        user32.EnumWindows((hWnd, arg) -> {
          int size = 1024 * 8;
          char[] buffer = new char[size];
          USER32_INSTANCE.GetWindowTextW(hWnd, buffer, size);

          char[] buffer2 = new char[size];
          PointerByReference pointer = new PointerByReference();
          User32DLL.GetWindowThreadProcessId(hWnd, pointer);
          Pointer process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pointer.getValue());
          Psapi.GetModuleBaseNameW(process, null, buffer2, size);

          String result = Native.toString(buffer).trim();
          String proc = Native.toString(buffer2).trim();

          // ... (non-JNA stuff)
        }

касался C / C ++ с колледжа и, честно говоря, понятия не имею, как на самом деле освободить память здесь

Я знаю, что есть утечка памяти - я выполнил некоторое профилирование с YourKit и отследил утечку памяти для этого блока кода (в частности, он, похоже, просачивается в вызове GetWindowTextW и вызовах Native.toString ()). Может ли кто-нибудь просто дать мне пример того, как правильно освободить используемые блоки памяти?

я вижу этоPointer имеетclear() метод, я должен использовать это? Но я не знаю, как получить размер (clear принимает аргумент длины). Я также вижу, что естьMemory введите эти подклассыPointerно согласноinstanceofНи один из Указателей, которые у меня есть сейчас, на самом деле не является примером этого.

Ответы на вопрос(1)

Ваш ответ на вопрос