Странное поведение расширенной функции C ++

Я пишу обертку Python для функции C ++ repeating_count::count(string str), Алгоритм этой функции не важен, но он всегда возвращает int,
Моя обертка получает list[str] в качестве ввода и возврата list[int], Код моей обертки ниже:

PyObject* count_rep_list(PyObject *mod, PyObject *args){
PyObject* inputList = PyList_GetItem(args, 0);
PyObject* outputList = PyList_New(0);
cout << PyList_Size(inputList);
char* str;
for(size_t i = 0; i < PyList_Size(inputList); ++i){
PyObject* list_item = PyList_GetItem(inputList, i);
if(!PyArg_Parse(list_item, "s", &str)){
return NULL;
}
PyList_Append(outputList, PyLong_FromSize_t(repeating_count::count(string(str))));
}
return outputList;
}

Затем я сделал модуль Python с этой функцией:

PyMODINIT_FUNC PyInit_repeating_count() {
static PyMethodDef ModuleMethods[] = {
{"count_rep_list", count_rep_list, METH_VARARGS, "counting repeatings for list of strings"},
{ NULL, NULL, 0, NULL}
};
static PyModuleDef ModuleDef = {
PyModuleDef_HEAD_INIT,
"repeating_count",
"counting repeatings",
-1, ModuleMethods,
NULL, NULL, NULL, NULL
};
PyObject * module = PyModule_Create(&ModuleDef);
return module;
}

Я успешно скомпилировал и связал этот модуль в .so файл. Но когда я хочу вызвать функцию из Python 3, я ловлю

Ошибка сегментации (ядро сброшено)

Итак, что я делаю не так?

Фрагмент кода Python для вызова count():

from repeating_count import *
print(count_rep_list(["sdfsf", "sf", "sdfvgsdgsd"]))

0

Решение

Я решил свою проблему. Произошла просто ошибка в коде.

Я должен был использовать PyTuble_GetItem(args, 0) вместо PyList_GetItem(args, 0) beacuse args это кортеж

0

Другие решения


По вопросам рекламы [email protected]