我正在使用单个链表编写程序。我要从链表的末尾添加元素,为此,我需要做null检查。但是在我尝试检查元素是否为NULL或nullptr之后,出现错误。 !*head
检查方法是否有问题? P.S还想听听是否有更好的方法在链表中创建/插入新节点。
#include <iostream>
typedef struct vertex vertex;
typedef struct edge edge;
typedef struct vertex {
int vertex;
struct vertex * next;
edge ** head;
}vertex;
typedef struct edge {
int vertex1, vertex2;
struct edge * next;
}edge;
void add_vertex(vertex ** head, int vertex_value) {
vertex * new_vertex = new(vertex);
new_vertex->vertex = vertex_value;
if (!*head) {
new_vertex->next = NULL;
*head = new_vertex;
return;
}
vertex * tracer = *head;
while (tracer->next != NULL) {
tracer = tracer->next;
}
tracer->next = new_vertex;
new_vertex->next = NULL;
}
int main() {
vertex ** head = nullptr;
add_vertex(head, 1);
}
if(!*head)
时刻,我在add_vertex函数中收到读取访问冲突错误。
答案 0 :(得分:1)
您正试图取消引用head
,它本身就是NULL。
在C ++中这是非法的。
构建add_vertex
函数的方式,绝不能将其NULL参数作为head
发送。
在head
中分配一个main
,该问题将得到解决。
答案 1 :(得分:0)
主要
vertex *head = nullptr;
add_vertex(&head, 1);
这可以解决您的问题,但是最好通过引用来传递。