首页 文章

尝试检查指针是否为空后,C得到错误

提问于
浏览
-3

我'm writing a program using single linked list. I' m从链表的末尾添加元素,为此我需要进行空检查 . 但在我尝试检查元素是否为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 回答

  • 1

    您正试图取消引用 head ,这是自我NULL . 这在C中是非法的 .

    构建 add_vertex 函数的方式,必须永远不要将其作为 head 发送给NULL参数 . 在 main 中分配 head ,该问题将得到解决 .

  • 0

    主要的

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

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

相关问题