我正在尝试调用Python的C库中的getsizeof方法,下面是我的代码:
//Returns in bytes the size of obj in memory
//sys.getsizeof(obj)
size_t getSizeOf(PyObject* obj){ //obj could be dict or list
Py_INCREF(obj);
PyObject* sys = PyModule_New("sys"); //import sys
PyObject* string = Py_BuildValue("s", "getsizeof");
PyObject* res = PyObject_CallMethodObjArgs(sys, string, obj, NULL); //res = sys.getsizeof(obj)
Py_DECREF(sys);
Py_DECREF(string);
long tmp = PyLong_AsLong(res);
Py_DECREF(res);
Py_DECREF(obj);
return (size_t)tmp;
}
这个代码给了我一个segfault。不知道为什么。我做错了什么?
1条答案
按热度按时间bkhjykvo1#
使用
PyImport_ImportModule
导入一个模块。使用PyObject_CallMethod
也简化了调用。不需要增加传入的obj
。从Python调用方法: