首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

:创建链表出错

2012-03-22 
求助:创建链表出错#include stdio.h#defineN9typedefstructNode{intinfostructNode*next}LNode,*LinkL

求助:创建链表出错
#include <stdio.h>

#define   N   9

typedef   struct   Node
{   int     info;
    struct   Node   *next;
}LNode,   *LinkList;

LinkList   Creat_List(LinkList   list,int   n)   /*创建链表   */
{
    int   i;
    LNode   *p,*q;

      p   =   (LinkList)malloc(sizeof(LNode));
    if(list   !=   NULL)
        list-> next   =   p;

    for(i=0;   i <n;   i++)         /*   在链表的尾部插入   */
        {
            q   =   (LNode   *)malloc(sizeof(LNode));
                q-> info   =   i;
            q-> next   =   NULL;
            p   =   q;
            p   =   p-> next;

        }
        return   list;

}

void   main(void)
{
    int   i;
    LNode   *p;
    LinkList   list;
    list   =   (LinkList)malloc(sizeof(LNode));
    list=Creat_List(list,N);
    p   =   list-> next;

    for(i=0;   i <N;   i++)
      {
          printf( "%d ",p-> info);
          p   =   p-> next;
      }

      getch();

}


为什么得不到我想要得结果呢!
理论上得结果应该是012345678.
 
  int   *p;
    int   *list;

    list   =   (int   *)malloc(sizeof(int));
  p   =   (int   *)malloc(sizeof(int));  
        *list   =   12;

    p   =   list;

和    

int   *p;
    int   *list;

    list   =   (int   *)malloc(sizeof(int));
        *list   =   12;

    p   =   list;

两者之间有什么不同?

前者p和list   拥有各自的空间,执行p   =   list后p和list仍然指向各自的空间.两个空间储存的地址相同.
后者只给list分配了空间,执行p   =   list后p和list   都指向同一个空间.

不知道我分析的正不正确,望高手指点!



[解决办法]
int *p;
int *list;

list = (int *)malloc(sizeof(int));
p = (int *)malloc(sizeof(int));
*list = 12;
//这里p和list各自有自己的动态空间

p = list;//用p指向list的内存,从而原来p拥有的内存泄漏了(无法回收了)


int *p;
int *list;

list = (int *)malloc(sizeof(int));
*list = 12;

p = list
没有问题,只有一块分配的内存p 和list同时指向

热点排行