动态分配指针数组出错了?
/*创建一个类型为don的链表并输入相应的某几个值,调用lianbiao以头指针为参数
让函数把链表中的各个节点的指针域按照相反的循序排序然后输出*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct don
{
int a;
struct don *zz;
};
int main(void)
{
struct don *lianbiao(struct don *tzz);
struct don *tzz,*z,*szz;
int n,i;
printf("输入需要创建链表的节点个数:");
w: scanf("%d",&n);
if(n<=0)
{
printf("输入错误,请重新输入:\n");
goto w;
}
for(i=0;i<n;i++)
{
if((z=(struct don *)malloc(sizeof(struct don)))==NULL)
{
printf("分配内存失败,程序结束!");
getch();
exit(1);
}
if(i==0)
{
tzz=z;
szz=z;
}
else
{
szz->zz=z;
szz=z;
}
printf("请输入第%d个节点数据域的值:",i+1);
scanf("%d",&z->a);
}
szz->zz=NULL;
z=lianbiao(tzz);
if(z==NULL)
{
printf("Error....");
getch();
exit(1);
}
while(z!=0)
{
printf("相反循序排序后各个节点数据域的值分别为:");
printf("%d\n",z->a);
}
getch();
return 0;
}
struct don *lianbiao(struct don *tzz)
{
int n=0,i,f;
struct don *zzz=tzz,**zi;
if(tzz==NULL)
{
exit(1);
}
while(tzz!=NULL)
{
n++;
tzz=tzz->zz;
}
tzz=zzz;
if((zi=(struct don **)malloc(sizeof(struct don *)*n))==NULL)
{
return NULL;
}
for(i=0;tzz!=NULL;i++)
{
zi[i]=tzz;
tzz=tzz->zz;
}
for(i=0,f=(n-1);i<(n/2);i++,f--)
{
zzz=zi[i]->zz;
zi[i]->zz=zi[f]->zz;
zi[f]->zz=zzz;
}
return tzz;
}
创建好链表调用lianbiao函数的时候返回值总是空,能够返回空指针的也就是分配内存的那地方(看75行),动态分配指向指针的数组我是在网上查到的,也单独测试过了 不会错。。但是他就是错啊..N的大小我调试过了正常的,节点个数是3他就是3,应该不会太大分配不到内存,就算是也不会是每次