我正在为自己实现一个跳过列表,但我在使用 C++ 时遇到了一些问题。我有两个结构:
跳过列表的一个节点 - 它保存其 int 值,以及指向指向其他节点的指针数组的指针。
struct node{ int val; node** next; };
Skiplist 保存指向列表头部和尾部的指针(哨兵)。
struct skiplist{ node *head, *tail; };
另外,我有一个函数,它返回一个指向skiplist结构的指针(我使用这个函数来初始化skiplist):
skiplist* createSkipList(){
skiplist* l = new skiplist;
node* listHead = new node;
node* listTail = new node;
node* headNext[MAX_LEVEL]; //array of pointers
listHead->next = headNext;
for(int i=0; i<MAX_LEVEL; i++){
listHead->next[i] = listTail;
}
l->head=listHead;
l->tail=listTail;
}
在我调用的 main() 函数中:
skiplist* skiplist=createSkipList();
该函数中的一切工作正常createSkipList()
,但如果我想引用 main() 中的跳过列表,即通过访问skiplist->tail
程序崩溃。我一直在寻找相关的帖子,但他们没有帮助我。
正如在类似帖子中提到的,我不应该遇到悬空指针,因为我使用new
运算符来分配结构。我将不胜感激任何提示;)