创建循环链接列表编译器停止工作

时间:2015-10-14 12:03:28

标签: c

编译器停止工作,请给我一些解决方案

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
    int data;
    struct node *next;
}node;
node * create()
{
    node *p;
    p=malloc(sizeof(node));
    p->next=NULL;
    return p;
}
void add(node **h,int ele)
{   node *temp;
    temp=(*h);
    node *p=create();
    while(temp->next!=temp)
    temp=temp->next;
    temp->next=p;
    p->next=temp;
    p->data=ele;
    (*h)=temp;

}


void main()
{   int ch,ele;
    node *h;
    h->next=h;

    do
    {   printf("\n1 add 2 delete 3 insert at kth position 4 delete at kth position");
        scanf("%d",&ch);

        if(ch==1)
        {
        scanf("%d",&ele);
        add(&h,ele);
    }
    //if(ch==2)

    }while(ch!=5);

}

1 个答案:

答案 0 :(得分:3)

就像我在评论中所说的那样,我的猜测是你有一个崩溃,程序在你运行程序时会停止,而且它的构建没有错误。

原因是您正在使用本地非静态变量h而未初始化它。除非已初始化,否则所有本地非静态变量都具有 indeterminate 值,并且在没有初始化的情况下使用这些变量会导致未定义的行为

解决方案非常简单:为一个节点分配内存(作为普通变量或动态)并用它初始化指针h

大多数编译器实际上都能够检测到这类问题,但由于它在语法和语义上都是合法的,因此不会发出错误,而是发出警告。如果你没有得到这样的警告,那么你需要启用更多警告。