Структура копирования Python ctypes, расположенная во временном буфере ⇐ Python
Структура копирования Python ctypes, расположенная во временном буфере
У меня есть код, который выглядит следующим образом:
из импорта ctypes * импортировать некоторую_библиотеку класс Вещь(Структура): _поля_ = [ ("А", c_uint8*4), («Б», Группа*4)] pointer_to_thing = POINTER(вещь)() защита get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание some_library.release_memory() вернуть вещь вещь = получить_вещь() что не удается, потому что some_library.give_me_the_thing() дает мне ссылку на эту вещь, а some_library.release_memory() освобождает память, в которой находится эта вещь. Если я прокомментирую some_library.release_memory(), это сработает, но это должно быть сделано не так. Я должен освободить память перед возвратом из функции, поэтому я хотел бы сделать копию объекта и вернуть эту копию, вот так:
def get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание копия_вещи = Вещь() мемпереместить( адрес(копия_вещи), адрес(вещи), размер(Вещь), ) some_library.release_memory() вернуть копию_вещи Однако он всегда возвращает Thing с неправильными данными. Если some_library.release_memory() прокомментирован, то все работает как положено. Как будто он вообще не копирует содержимое...
Я тоже пробовал
def get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание copy_of_thing = Thing.copy_from_buffer(вещь) some_library.release_memory() вернуть копию_вещи и поведение точно такое же, т. е. если я освобождаю память, происходит сбой, если нет, то работает.
К сожалению, some_library — сложная вещь, и мне не так-то просто создать MWE для публикации здесь.
У меня есть код, который выглядит следующим образом:
из импорта ctypes * импортировать некоторую_библиотеку класс Вещь(Структура): _поля_ = [ ("А", c_uint8*4), («Б», Группа*4)] pointer_to_thing = POINTER(вещь)() защита get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание some_library.release_memory() вернуть вещь вещь = получить_вещь() что не удается, потому что some_library.give_me_the_thing() дает мне ссылку на эту вещь, а some_library.release_memory() освобождает память, в которой находится эта вещь. Если я прокомментирую some_library.release_memory(), это сработает, но это должно быть сделано не так. Я должен освободить память перед возвратом из функции, поэтому я хотел бы сделать копию объекта и вернуть эту копию, вот так:
def get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание копия_вещи = Вещь() мемпереместить( адрес(копия_вещи), адрес(вещи), размер(Вещь), ) some_library.release_memory() вернуть копию_вещи Однако он всегда возвращает Thing с неправильными данными. Если some_library.release_memory() прокомментирован, то все работает как положено. Как будто он вообще не копирует содержимое...
Я тоже пробовал
def get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание copy_of_thing = Thing.copy_from_buffer(вещь) some_library.release_memory() вернуть копию_вещи и поведение точно такое же, т. е. если я освобождаю память, происходит сбой, если нет, то работает.
К сожалению, some_library — сложная вещь, и мне не так-то просто создать MWE для публикации здесь.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Python ctypes и np.array.ctypes.data_as неожиданное поведение при нарезке
Anonymous » » в форуме Python - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Неожиданное поведение Python ctypes и np.array.ctypes.data_as при индексировании
Anonymous » » в форуме Python - 0 Ответы
- 37 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Неожиданное поведение Python ctypes и np.array.ctypes.data_as при индексировании
Anonymous » » в форуме Python - 0 Ответы
- 30 Просмотры
-
Последнее сообщение Anonymous
-