2015-03-26 2 views
2

У меня есть файл 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. 
+0

Да, спасибо, исправлено. Но это всего лишь ошибка, а не проблема. – waszil

+0

Ваш неизменный код работает для меня с mingw-gcc 4.7.2 под Windows 7 64 Bit и Python 2.7.6, а также Python 3.3.0 – halex

+0

Когда вы говорите, что malloc работает, вы проверили возвращаемое значение? – cdarke

ответ

0

Оказалось, что проблема была в этом : Я построил dll внутри cygwin, с встроенным gcc cygwin. Он связал среду выполнения cygwin1.dll, и ctypes python каким-то образом не допустили этого. Когда я построил dll с помощью gcc MinGW, теперь все работает, так как использует время выполнения Windows.

Смежные вопросы