帮忙看下这个程序!我实在找不出错在哪里?
我用的编译器是GCC ver 4.12=====================
编译这个程序的时候语法没有问题,但是在执行程序的时候总是提示"段错误 (core dumped)"
=====================
程序目的:试将一个无序的线性表A = (11, 16, 8, 5, 14, 10, 38, 23)转换成一个按升序排列的有序线性表(用链表实现)。
=====================
源程序如下:(我插入flag检查了下,发现问题在函数 void sort(struct c *f)上,但是不知道为什么错,请大虾指教!)
#include <stdio.h>
#include <stdlib.h>
struct c{
int count;
int h;
struct c *next;
};
void sort(struct c *f){
struct c *p,*q,*t,*s;
int i,j,m,n;
for(i=0;i<8;i++){
//printf("%d\n",i);
if(!p->next) continue;
p=f;
q=p->next;
t=q->next;
//printf("%3d,%3d,%3d\n",p->count,q->count,t->count);
for(j=0;j<8-i;j++){
printf("%d,%d",i,j);
m=p->h;
n=p->h;
if(m>n){
s=p;
p=q;
q=t;
t=s;
}
else{
if(!p->next) continue;
p++;
q=p->next;
t=q->next;
}
}
}
}
void error(int e){
switch(e){
case 0 :printf("error::execute malloc()\n");break;
default:printf("error::unknow\n");break;
}
exit(0);
}
main(){
struct c *head,*p,*r;
struct c init; //这个结构体仅仅提供一个头节点;
int a[8]={11,16,8,5,14,10,38,23};
int i;
//printf("step one\n");
head=&init;
p=head;
for(i=0;i<8;i++){
if(!(r=malloc(sizeof(struct c)))) error(0);
p->next=r;
r->next=NULL;
p=p->next;
r->count=i+1;
r->h=a[i];
//printf("a[%d]=%3d\n",i,r->h);
}
//p=head->next;
//while(p){
// printf("%2d-->%3d\n",p->count,p->h);
// p=p->next;
//}
//printf("step two\n");
p=head->next;
sort(p);
p=head->next;
while(p){
printf("%2d:0x%X-->%3d\n",p->count,p,p->h);
p=p->next;
}
}