编译器停止工作,请给我一些解决方案
#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);
}
答案 0 :(得分:3)
就像我在评论中所说的那样,我的猜测是你有一个崩溃,程序在你运行程序时会停止,而且它的构建没有错误。
原因是您正在使用本地非静态变量h
而未初始化它。除非已初始化,否则所有本地非静态变量都具有 indeterminate 值,并且在没有初始化的情况下使用这些变量会导致未定义的行为。
解决方案非常简单:为一个节点分配内存(作为普通变量或动态)并用它初始化指针h
。
大多数编译器实际上都能够检测到这类问题,但由于它在语法和语义上都是合法的,因此不会发出错误,而是发出警告。如果你没有得到这样的警告,那么你需要启用更多警告。