Chinaunix

标题: 指针返回的问题 [打印本页]

作者: lmatt    时间: 2006-04-12 22:23
标题: 指针返回的问题
输入3 1 7 2 4 8 4 0

如果不按注释改的话.输出6-->1-->4-->7-->2-->3-->5-->NULL

按注释改的话.输出1-->4-->7-->2-->3-->5-->NULL

改了之后的uncode函数和没改的函数,对指针b的操作没什么差别.那么结果也应该是一样的.但不一样.这是为什么?
#include<stdio.h>
#include<stdlib.h>
struct circle
{
    int data;
    int code;
    struct circle * ptr;
};
typedef  struct circle LIST;
typedef LIST *LISTPTR;
LISTPTR uncode(LISTPTR);//把这的LISTPTR 改为void
void vprint(LISTPTR);
void creatList(LISTPTR);
main()
{
        LISTPTR a;
a=malloc(sizeof(LIST));
     a->ptr=NULL;
        creatList(a);
        vprint(uncode(a));//这个改为uncode(a);vprint(a);
        getch();

  return 0;
}
void creatList (LISTPTR a)
{
    LISTPTR b,s;
    int c,j=1;
    b=malloc(sizeof(LIST));
    b->ptr=NULL;
    b=a;
    scanf("%d",&c);
    b->data=c;
    b->code=j;
    while(1)
    {
     scanf("%d",&c);
     if(c==0) break;
     j++;
     s=malloc(sizeof(LIST));
     s->data=c;
     s->code=j;
     b->ptr=s;
     b=s;
     }
     b->ptr=a;
}
void vprint(LISTPTR e)
{
    while(e!=NULL)
    {
    printf("%d-->",e->code);
    e=e->ptr;
    }
    printf("NULL\n");
}
LISTPTR uncode(LISTPTR b))//把这的LISTPTR 改为void
{
    int m=20,k=1,j=1;
    LISTPTR c,a;
    a=b;
    b=malloc(sizeof(LIST));
    b->ptr=NULL;
    c=b;
    while(1)
    {
        while(1)
        {   
     if(k>=m-1) break;
            a=a->ptr;
     if(a==a->ptr)
  {
  j=0;
  break;
  }
            k++;
        }
m=a->ptr->data;
        k=1;
c->ptr=a->ptr;
        c=a->ptr;
        a->ptr=a->ptr->ptr;
        if(m!=1) a=a->ptr;
        if(j==0)
{
b=b->ptr;
c->ptr=NULL;
break;
}
     }
return b;//这句删掉.
}

[ 本帖最后由 lmatt 于 2006-4-13 20:18 编辑 ]
作者: soul_of_moon    时间: 2006-04-13 08:12
看不下去了,晕死了,不过可以指出你一个问题:
b=malloc(sizeof(LIST));
    b->ptr=NULL;
    b=a;
b申请的动态空间内存泄露
作者: lmatt    时间: 2006-04-13 12:29
原帖由 soul_of_moon 于 2006-4-13 08:12 发表
看不下去了,晕死了,不过可以指出你一个问题:
b=malloc(sizeof(LIST));
    b->ptr=NULL;
    b=a;
b申请的动态空间内存泄露

"动态空间内存泄露"不是很懂,能解释一下吗?
作者: converse    时间: 2006-04-13 13:30
你把题目改一改说明问题,改好了我再解封,谢谢
作者: converse    时间: 2006-04-13 20:13
已经改了,能帮我看一下为什么吗?


>>你把题目改一改说明问题,改好了我再解封,谢谢

再次重复一次...
要想别人更好的帮助你,请你先把自己的问题描述清楚,自己连问题出在哪里都无法描述清楚,也许说明自己都没有考虑这个问题吧

你改的这个题目和没有改没有什么区别...

[ 本帖最后由 converse 于 2006-4-13 20:18 编辑 ]
作者: lmatt    时间: 2006-04-13 20:43
谢谢楼上.请大家帮忙看一下,我想了很久,就是不知道为什么.
作者: chinatme    时间: 2006-04-16 12:02
你这是定义的链表哪里有问题,把问题说明白点




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2