On 2020-10-23 19:32, Pasha Stetsenko wrote:
Thanks for all the replies!
Following Chris's advice, I tried to reduce the code to the smallest
reproducible example (I guess I should have done it sooner),
but here's what I came up with:
```
#include <cstring>
#include <Python.h>
static int my_init(PyObject*, PyObject*, PyObject*) { return 0; }
static void my_dealloc(PyObject*) {}
static void init_mytype(PyObject* module) {
PyTypeObject* type = new PyTypeObject();
std::memset(type, 0, sizeof(PyTypeObject));
Py_INCREF(type);
type->tp_basicsize = static_cast<Py_ssize_t>(sizeof(PyObject));
type->tp_itemsize = 0;
type->tp_flags = Py_TPFLAGS_DEFAULT;
type->tp_new = &PyType_GenericNew;
type->tp_name = "mytype";
type->tp_doc = "[temporary]";
type->tp_init = my_init;
type->tp_dealloc = my_dealloc;
PyType_Ready(type);
PyModule_AddObject(module, "mytype", reinterpret_cast<PyObject*>(type));
}
```
You're setting the deallocation function to 'my_dealloc', but that
function isn't deallocating the object.
Try something like this:
static void my_dealloc(PyObject* obj) {
PyObject_DEL(obj);
}
[snip]
--
https://mail.python.org/mailman/listinfo/python-list