C ++在尝试检查指针是否为空后获取错误

时间:2018-12-08 22:16:30

标签: c++

我正在使用单个链表编写程序。我要从链表的末尾添加元素,为此,我需要做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函数中收到读取访问冲突错误。

2 个答案:

答案 0 :(得分:1)

您正试图取消引用head,它本身就是NULL。 在C ++中这是非法的。

构建add_vertex函数的方式,绝不能将其NULL参数作为head发送。 在head中分配一个main,该问题将得到解决。

答案 1 :(得分:0)

主要

vertex *head = nullptr;
add_vertex(&head, 1);

这可以解决您的问题,但是最好通过引用来传递。