下面的程序可以运行,但会出现一个对话框,提示 filename.exe 已停止运行。为什么这样?
The following program below works but a dialog box appears saying that the filename.exe has stopped working. Why so?
这个程序应该是一个从链表中删除节点的演示。
该程序可以运行并且输出与预期相同,但不久之后会出现一个对话框,提示可执行文件已停止运行。我使用代码块作为 IDE 和 C 编程语言。我想知道为什么会发生这种情况以及如何避免将来发生这种情况。提前致谢。
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *next;
};
void create(struct node *first,int a[])
{
struct node *t,*last;
int i;
first->data=a[0];
first->next=NULL;
last=first;
for(i = 1; i < 5; i++)
{
t=(struct node *)malloc(sizeof(struct node));
t->data=a[i];
t->next=NULL;
last->next=t;
last=t;
}
}
void display(struct node *f)
{
int i;
for(i=0;i<5;i++)
{
printf("%d ",f->data);
f=f->next;
}
}
int delete(struct node * f,int pos)
{
int i,x;
struct node *q=NULL;
if (pos < 1 || pos > 5) {
return -1;
}
if (pos == 1) {
q=f;
f=f->next;
x=q->data;
free(q);
return x;
}
for (i = 0; i < pos - 1; i++)
{
q=f;
f=f->next;
}
q->next=f->next;
x=f->data;
free(f);
return x;
}
int main()
{
int a[]={3,5,7,8,9};
struct node *first;
int pos=4,t;
first=(struct node *)malloc(sizeof(struct node));
create(first,a);
t=delete(first,pos);
display(first);
return 0;
}
问题出在 f 为 null 的显示函数上
一个解决方案是删除 for 循环并使用 while 测试 f 是否为 null。
我还添加了一个最终的 \n
来刷新 stdout
void display(struct node *f)
{
while (f)
{
printf("%d ",f->data);
f=f->next;
}
printf("\n");
}
这个程序应该是一个从链表中删除节点的演示。 该程序可以运行并且输出与预期相同,但不久之后会出现一个对话框,提示可执行文件已停止运行。我使用代码块作为 IDE 和 C 编程语言。我想知道为什么会发生这种情况以及如何避免将来发生这种情况。提前致谢。
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *next;
};
void create(struct node *first,int a[])
{
struct node *t,*last;
int i;
first->data=a[0];
first->next=NULL;
last=first;
for(i = 1; i < 5; i++)
{
t=(struct node *)malloc(sizeof(struct node));
t->data=a[i];
t->next=NULL;
last->next=t;
last=t;
}
}
void display(struct node *f)
{
int i;
for(i=0;i<5;i++)
{
printf("%d ",f->data);
f=f->next;
}
}
int delete(struct node * f,int pos)
{
int i,x;
struct node *q=NULL;
if (pos < 1 || pos > 5) {
return -1;
}
if (pos == 1) {
q=f;
f=f->next;
x=q->data;
free(q);
return x;
}
for (i = 0; i < pos - 1; i++)
{
q=f;
f=f->next;
}
q->next=f->next;
x=f->data;
free(f);
return x;
}
int main()
{
int a[]={3,5,7,8,9};
struct node *first;
int pos=4,t;
first=(struct node *)malloc(sizeof(struct node));
create(first,a);
t=delete(first,pos);
display(first);
return 0;
}
问题出在 f 为 null 的显示函数上
一个解决方案是删除 for 循环并使用 while 测试 f 是否为 null。
我还添加了一个最终的 \n
来刷新 stdout
void display(struct node *f)
{
while (f)
{
printf("%d ",f->data);
f=f->next;
}
printf("\n");
}