PyObject_CallFunction访问冲突写入位置0x0000000c

时间:2010-09-27 14:55:02

标签: python c

我正在尝试在python中包装一个c通信库,当我尝试处理大量数据时遇到了一些麻烦。以下代码适用于较小的消息,但当消息大于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 :(得分:0)

进一步调试代码之后,实际上使用字符串的python代码存在问题。该字符串是一个谷歌协议缓冲区,当从文件写入数据并解析字节时,我可以捕获库引发的python异常。