PyObject_CallFunction 访问冲突,写入位置 0x0000000c
我正在尝试把一个C语言的通信库封装到Python中,但在处理大量数据时遇到了一些麻烦。下面的代码在处理较小的消息时可以正常工作,但当消息超过400MB时,我在调用PyObject_CallFunction时遇到了以下错误:
在python.exe的0x1e00d65f处发生未处理的异常:0xC0000005:访问冲突,写入位置0x0000000c。
int request_callback(c_request* req, c_msg* msg, void* client)
{
PyGILState_STATE gstate;
PyObject* callback;
PyObject* result;
unsigned int request_addr;
PyObject* py_request_addr;
PyObject* message;
gstate = PyGILState_Ensure();
request_addr = (unsigned int)req;
py_request_addr = PyInt_FromLong(request_addr);
if (PyDict_Contains(request_callback_dict, py_request_addr) == 1)
{
callback = PyDict_GetItem(request_callback_dict, py_request_addr);
message = PyString_FromStringAndSize(msg->data, msg->len);
result = PyObject_CallFunction(callback, "O", message);
}
PyGILState_Release(gstate);
return 0;
}
有没有人能帮我分析一下可能是什么原因呢?谢谢。
1 个回答
0
经过进一步调试代码,我发现其实是使用字符串的Python代码出了问题。这个字符串是谷歌的一种协议缓冲区格式,当从文件中写入数据并解析这些字节时,我会捕捉到库抛出的一个Python异常。