@jidomasson

Как вывести минимальный элемент из динамической библиотеки?

Надо вывести минимальный элемент, используя функцию из динамической библиотеки C.

Что-то не получается: то переполнение стека, то еще что-то.
Не пойму, это проблема функции или моего написания в Python?

Так как функция из лабораторной работы и по идеи работает.
Рекурсивная функция для нахождения минимального елемента:
int min_element(int *begin, int *end) 
{
    if (begin == end)
        return *begin;

    int smin = min_element(begin + 1, end);

    return *begin < smin ? *begin : smin;
}


Тут нужно найти минимальный елемент:
arrRandom = lib.arrRandom
arrRandom.restype = None
arrRandom.argtypes = [ctypes.POINTER(ctypes.c_int), ctypes.c_int]

min_element = lib.min_element
min_element.restype = ctypes.c_int
min_element.argtypes = [ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)]

size = 5
A = (ctypes.c_int * size)()

arrRandom(A, size)

print("Random array A:")
for i in range(size):
    print(A[i], end=' ')
print()
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
jidomasson, Вот и проблема (код из комментариев к вопросу):

second_element = ctypes.c_int(A[1])
begin = ctypes.pointer(second_element)

last_element = ctypes.c_int(A[size - 1])
end = ctypes.pointer(last_element)


Тут вы, похоже, созадете новые объекты типа c_int и присваиваете им значения второго и последнего элементов массива. А потом указатели на них передаете в функцию. Функция ожидает указатели на элементы массива, а получает указатели на какие-то 2 никак не связанные между собой переменные. Поэтому она блуждает по левой памяти и просиходит что угодно. Хоть падение, хоть зависание.

Вам надо брать указатели от A[0] и A[size-1] нарпямую.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы