我正在尝试为 python 编写一个 C 扩展。这个扩展基本上只是一个双链表。
以下是我编写的代码中的部分内容:-
staticforward PyTypeObject linked_list_type;
typedef struct _linked_list_object{
PyObject_HEAD
int val;
struct _linked_list_object *prev;
struct _linked_list_object *next;
} linked_list_object;
//this method adds a new node to the linked list
static linked_list_object* add_node(linked_list_object * obj, int val)
{
linked_list_object* new;
new = PyObject_New(linked_list_object, &linked_list_type);
if (new){
new->val = val;
if (obj)
{
new->prev = obj;
new->next = obj->next;
obj->next = new;
new->next->prev = new;
}
else{
new->next = new;
new->prev = new;
}
return new;
}
else
{
return NULL;
}
在我编译这个模块并将其导入 python 之后。
该代码引发分段错误。
>>> import linked_list
Segmentation fault: 11 (core dumped)
我注意到如果我注释掉,则不会生成此分段错误
new = PyObject_New(linked_list_object, &linked_list_type);
以及它下面的代码。
有人可以帮我解释为什么会发生这种分段错误。?
我知道我错过了一些东西,但我无法弄清楚它是什么。