我有一个包含两个函数的c文件。这个文件用gcc编译成一个dll,然后从python用ctypes调用。简单函数try1()
工作正常,但在调用try2()
时,它会抛出一个
windows error: access violation when writing 0x0
我的猜测:从包含的库中调用的c库函数存在一些问题:printf,strcpy等。但是malloc和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
python电话:
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 :(得分:0)