У меня есть файл c, содержащий две функции. Этот файл скомпилирован с gcc в dll, а затем вызывает из python ctypes. Простая функция try1()
работает отлично, но при вызове try2()
, он бросаетPython ctypes dll вызывает нарушение доступа при использовании библиотечных функций
windows error: access violation when writing 0x0
Мое предположение: есть некоторая проблема с библиотеки функций С, которые вызываются из включенных библиотек: Printf, зЬгсру и т.д. Но таНос и strlen прекрасно работает ...
Как я могу это исправить? Что я делаю не так? Благодаря! Вот код экстракты:
mylib.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int try1(int x)
{
return x+2;
}
int try2(int x)
{
char* str;
str = malloc(strlen("text")+1); // works
strcpy(str, "text"); // problematic line
printf("x: %i\n", x); // problematic line
free(str); // works
return x+2;
}
сборник:
gcc -shared -o mylib.dll mylib.c -O3 -Wall
питон вызов:
import ctypes
mylib = ctypes.cdll.mylib
print mylib.try1(5) # works fine, prints 7
print mylib.try2(5) #crashes with the access violation error, if the problematic lines are present.
Да, спасибо, исправлено. Но это всего лишь ошибка, а не проблема. – waszil
Ваш неизменный код работает для меня с mingw-gcc 4.7.2 под Windows 7 64 Bit и Python 2.7.6, а также Python 3.3.0 – halex
Когда вы говорите, что malloc работает, вы проверили возвращаемое значение? – cdarke