Null pointer assignment 是什么错误啊!!(这里有源码)
#include "stdio.h"
#include "stdlib.h"
typedef struct dbnode
{
int data;
struct dbnode* prior;
struct dbnode* next;
}DBLinkList;
DBLinkList* phead[3];
int county[3];
int countb[3];
void InputData();
void SortData();
void PrintData();
void main()
{
InputData(); /*输入数据*/
SortData(); /*排序*/
PrintData(); /*打印排序结果*/
return;
}
void CreateList(int data, int i);
void InputData()
{
int i = 0, j = 0;
int count = 0;
int data;
printf("\ninput three group numbers!\n");
for(i=0; i<3; i++)
{
phead[i] = malloc(sizeof(DBLinkList));
if(phead[i] == NULL)
{
printf("Cannot malloc memery!\n");
return;
}
phead[i]->data = 0;
phead[i]->prior = phead[i];
phead[i]->next = NULL;
printf("the count of the %dth: ",i+1);
scanf("%d",&count);
printf("input the number of %dth: ",i+1);
for(j=0; j<count; j++)
{
scanf("%d",&data);
CreateList(data, i);
}
printf("\n\n");
count = 0;
}
printf("input completly!\n");
scanf("%d",&count);
}
void SortData()
{
int i = 0;
DBLinkList* pmin = NULL,
* ptr = NULL,
* h = NULL;
for(i=0; i<3; i++)
{
printf("Sort NO.%d\n",i);
h = phead[i]->next;
if( h == NULL)
{
printf("LinkList is Empty!\n");
return;
}
countb[i] = 0;
county[i] = 0;
while( (h->next) != NULL)
{
pmin = h; ptr = pmin->next;
while(ptr != NULL)
{
countb[i]++;
if((ptr->data) < (pmin->data))
{
pmin = ptr;
}
ptr = ptr->next;
}
if(pmin != h)
{
ptr = h->next; h->next = pmin->next;
h->next->prior =h; pmin->next = ptr;
pmin->next->prior = pmin;
ptr = h->prior; h->prior = pmin->prior;
h->prior->next = h; pmin->prior = ptr;
pmin->prior->next = pmin;
county[i]++;
}
h = pmin->next;
}
}
}
void PrintData()
{
int i = 0;
DBLinkList* ptr;
printf("\nSort result:\n\n");
for(i=0; i<3; i++)
{
printf("\nNO.%d : ",i+1);
ptr = phead[i];
while(ptr->next != NULL)
{
ptr = ptr->next;
printf("%d ",ptr->data);
}
printf("\nCompare counts : %d\n",countb[i]);
printf("Move counts : %d\n\n",county[i]);
}
}
void CreateList(int data, int i)
{
DBLinkList* ptr =NULL;
DBLinkList* pnew = malloc(sizeof(DBLinkList));
if(pnew == NULL)
{
printf("\nCannot malloc memery!\n");
return;
}
pnew->data = data; pnew->next = NULL; pnew->prior = NULL;
ptr = phead[i];
printf("ptr = phead[%d]\n",i);
while(ptr->next != NULL)
{
ptr = ptr->next;
}
ptr->next = pnew;
pnew->prior = ptr;
return;
}
本程序实现的功能是,用直接选择法排序,用双向链表存储。
各位帮忙找找错误啊!!谢谢大家!