读书人

:创建链表出错

发布时间: 2012-03-22 17:43:57 作者: rapoo

求助:创建链表出错
#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同时指向

读书人网 >C语言

热点推荐