尝试引用指针时出现分段错误:C

sdinesh94

我正在尝试实现循环队列功能。我是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;
}

我在行中遇到细分错误

printf(“ idno为%d,数字为%d \ n”,idno,cptr-> nvalue);

为什么会发生错误?我想我没有正确地按值传递l 按值传递指针)。有人可以帮助我指出我要去哪里哪里吗?

谢谢

乔尔·c

您的代码有两个问题,第一个更严重。

您的第一个问题是未将CLlist结构headtail成员初始化为NULL,这可以(不确定)阻止任何实际数据存储在您的结构中。可以通过main在第一个insert调用之前添加以下两行来解决此问题

l->head = NULL;
l->tail = NULL;

您的第二个问题是在此行中:

if((l->head==l->tail)==NULL)

看起来这是在l->head与和l->tail进行NULL比较l->headl->tail实际上是与进行比较,然后将该布尔结果与进行比较NULL,这是有效的0该行应更改为:

if((l->head == NULL) && (l->tail == NULL))

这将分别测试headtail指针,并且仅在它们均为NULL时才采用该分支。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试取消引用动态分配的指针时出现分段错误

尝试访问struct中的指针时出现分段错误

尝试为指针分配新值时出现分段错误

尝试访问指向节点的指针时出现分段错误

取消引用指针时出现 SIGSEGV 分段错误

取消引用调用函数中的指针时出现分段错误

尝试引用char *中的第一个元素时,C中出现分段错误

在 C 中使用结构和指针时出现分段错误

使用链表中的指针结构时出现C分段错误

尝试将指针存储到另一个指针变量时出现分段错误

尝试反向打印数组时出现c ++分段错误

尝试克隆函数时出现分段错误(在C中)

通过指针时出现分段错误

释放指针时出现分段错误

从指针调用方法时出现分段错误

传递 char* 指针时出现分段错误

尝试连接节点时出现分段错误

尝试访问功能时出现分段错误

尝试打印结构时出现分段错误

C取消引用指针中的分段错误

尝试在C中获取文件扩展名时出现分段错误错误

尝试打印到文件时在C中出现分段错误错误

C:初始化带有tin结构的指针时出现分段错误

C-检查指针是否为NULL时出现分段错误

在 C 中使用双指针查找数组的行列式时出现分段错误

将值分配给指针 C++ 时出现分段错误

C ++:在push_back上迭代指针的向量时出现分段错误

在C中的for循环中使用结构指针时出现一些分段错误

将值移动到堆栈指针时出现分段错误