OSError: exception: access violation reading 0x0000000100000010
Я получаю OSError: exception: access violation reading, когда пытаюсь использовать библиотеку, написанную на c++ из python, код на python выглядит так:
self.normalizer = CDLL('engine/nav/cpp/bin/lib.dll')
lst_obj = (ctypes.c_int * len(list(range(15))))
lst = lst_obj()
lst[:] = [c_int(i) for i in list(range(15))]
self.normalizer.argtypes = [c_int, lst_obj]
self.normalizer.restype = c_int
print(self.normalizer.find_vlue(ctypes.c_int(5), lst))
lib.cpp:
#include <iostream>
#include <list>
extern "C" int find_vlue(int value, std::list<int>find){
int maximum = 0;
for (int element: find){
if (element<=value){
maximum = element;
}
}
//std::cout<<maximum;
return maximum;
}
Полная трассировка:
Traceback (most recent call last):
File "C:\Users\Ivan\Desktop\lma game\main.py", line 30, in <module>
nav_system = Navigator(level1)
File "C:\Users\Ivan\Desktop\lma game\engine\nav\navigator_core.py", line 34, in __init__
print(self.normalizer.find_vlue(ctypes.c_int(5), lst))
OSError: exception: access violation reading 0x0000000100000010
Компиляция прошла без ошибок:
PS C:\Users\Ivan\Desktop\lma game\engine\nav\cpp\sources> gcc .\lib.cpp -shared -o lib.dll -lstdc++
PS C:\Users\Ivan\Desktop\lma game\engine\nav\cpp\sources>
Я нашел это, но ничего из этого мне на помогло: https://qna.habr.com/q/1242560 https://stackoverflow.com/questions/54360555/python-ctypes-oserror-exception-access-violation-reading-0x00000000 Exception: access violation reading при вызове функции С из Python
Я читал оф. документацию ctypes, но она тоже мне ничем не помогла. Почему может возникать эта ошибка?
Ответы (1 шт):
Автор решения: Никита Самоуков
→ Ссылка
std::list из питона не создать. Нужно сишные типы использовать.