尝试延迟指针时的分段错误:C

sdi*_*h94 1 c pointers

我试图实现循环队列功能.我是一个C++编码器,我发现令人惊讶的是,在C中,struct不能有成员函数.无论如何这是我的实施: -

#include <stdio.h>
#include <stdlib.h>



struct node
{
    int nvalue;
    struct node *next;
};

struct CLlist
{
    struct node* head;
    struct node* tail;
    int size;
};

void insert(struct CLlist *l,int num)
{
    struct node *n=malloc(sizeof(struct node));
    n->nvalue=num;
    n->next=NULL;

    if((l->head==l->tail)==NULL)
    {
        l->head=l->tail=n;
    }
    else if(l->head==l->tail && l->head!=NULL)
    {
        l->head->next=n;
        l->tail=n;
        l->tail->next=l->head;
    }
    else
    {
        l->tail->next=n;
        l->tail=n;
        l->tail->next=l->head;
    }
    l->size++;
}

void print(struct CLlist *l)
{
    int idno=1;
    printf("printing the linked list with size as %d\n",l->size);
    struct node *cptr;
    for(cptr=(l->head);cptr!=(l->tail);cptr=cptr->next)
    {
        printf("The idno is %d and the number is %d\n",idno,cptr->nvalue);
        idno++;
    }
    //this is to print the last node in circular list : the tail node
    idno++;
    cptr=cptr->next;
    printf("The idno is %d and the number is %d\n",idno,cptr->nvalue);
}


int main()
{
    struct CLlist a;
    struct CLlist *l;
    l=&a;

    insert(l,2);
    insert(l,5);
    insert(l,7);
    insert(l,10);
    insert(l,12);
    print(l);


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在线上得到了分段错误

printf("idno是%d,数字是%d \n",idno,cptr-> nvalue);

为什么会出现错误?我想我没有正确地通过指针传递l (按值传递指针).有人可以帮我指出我哪里出错了吗?

谢谢

Som*_*ude 5

您永远不会amain函数中初始化变量,因此其内容是不确定的,并且使用该结构的成员将导致未定义的行为.