摘要:在Python C-API中是否有某种方法来确定PyObject*是否指向有效的Python对象?
上下文:我正在用C代码编写IDL (交互式数据语言)和Python之间的桥梁。当Python对象被包装在IDL对象中时,我做的第一件事就是使用以下C代码递增Python引用计数:
PyObject *pyObj = (PyObject *) id;
Py_INCREF(pyObj);
问题:通常,传入包装函数的整数"id“是由桥代码创建的,因此我可以相信它是一个有效的Python标识符(即它指向一个”真正的“Python对象)。但是,如果用户尝试手动创建其中一个对象,并且只是传入一个随机整数作为Python id,那么Python seg就会在Py_INCREF上出错并使应用程序崩溃。
我想进行一次健全性检查,只是为了验证指针是否确实指向有效的Python对象。我在Python C API中找不到任何可以实际检查给定指针是否确实是有效Python对象的东西。我尝试调用内置的"id“方法,以及垃圾收集器"gc.is_tracked()”,但如果给它们一个错误的指针,它们也会崩溃。
Python C-API中有没有什么东西可以验证PyObject指针是否有效?
发布于 2015-02-19 01:04:23
看起来答案是“否”,没有办法使用Python C API来确定PyObject指针是否有效。使用C指针的常用规则是适用的--要小心,知道你在做什么!
https://stackoverflow.com/questions/28572181
复制相似问题