标题:[求助]请大家帮我看看为什么会出现NUll pointer assignment
只看楼主
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
 问题点数:0 回复次数:8 
[求助]请大家帮我看看为什么会出现NUll pointer assignment

这是我用C写的一个链表程序,完成的功能是创建一个链表和输出一个链表,可到输出的时候总是有Null pointer assignment的错误信息,没有办法现在都已经是凌晨4:40了为了这个问题睡不着觉,请大家帮帮我吧,我的源程序如下:(我的Email:txbhj@163.com) 输入0代表链表结束 #define LEN sizeof(struct List) #define TRUE 1 #define ERROR 0 #define FALSE 0 #define NULL 0 #include "malloc.h" typedef int ElemType;

struct List{ ElemType elem; int size; struct List *next; };

struct List *creat(void){ struct List *head; struct List *p,*p1,*p2; p1=p2=(struct List *)malloc(LEN); scanf("%d",&p1->elem); p=head=NULL; while(p1->elem!=0){ p->size=+1; if(p->size==1)head=p1; else p2->next=p1; p2=p1; p1=(struct List *)malloc(LEN); scanf("%d",&p1->elem); } p2->next=NULL; return(head); }

void print(struct List *head){ struct List *p; printf("The records are:"); p=head; if(head!=NULL) do {printf("%d ",p->elem); p=p->next; }while(p!=NULL); }

main(){ struct List *head; head=creat(); print(head); }

[此贴子已经被作者于2005-8-7 4:52:44编辑过]

搜索更多相关主题的帖子: assignment pointer 链表 NUll define 
2005-08-07 04:45
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 

我随便帮你改的. 讨厌这样用那么多define做什么.写程序不提倡....... #define LEN sizeof(struct List) #define TRUE 1 #define ERROR 0 #define FALSE 0 #define NULL 0 #include "malloc.h" typedef int ElemType;

struct List{ ElemType elem; int size; struct List *next; };

struct List *creat(void){ struct List *head; struct List *p,*p1,*p2; p1=p2=(struct List *)malloc(LEN); scanf("%d",&p1->elem); p=head=NULL; while(p1->elem!=0){ //p->size=+1; 我没见过有那位写链表程序竟然要size的.如果你要用.你又用错了.p->size 根本没初始化 if(head==NULL)head=p1; else p2->next=p1; p2=p1; p1=NULL; p1=(struct List *)malloc(LEN); scanf("%d",&p1->elem); } p2->next=NULL; return(head); }

void print(struct List *head){ struct List *p; printf("The records are:"); p=head; if(head!=NULL) do {printf("%d ",p->elem); p=p->next; }while(p!=NULL); }

main(){ struct List *head; head=creat(); print(head); }

你拿我改的程序上机试下

[此贴子已经被作者于2005-8-7 9:44:22编辑过]


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-08-07 09:43
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
得分:0 
真是太感谢了,我本不是计算机专业的,没有系统的学过,都是出于对计算机热爱,现在才开始接触到C语言,还没有什么经验,我会努力的。

我本菜鸟, 请多关照
2005-08-07 12:08
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
得分:0 
我还有个问题要问,能给我解释一下吗?你为什么要在p2=p1后加上p1=NULL这行代码??

我本菜鸟, 请多关照
2005-08-07 12:27
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
得分:0 
确切的应该是free(p1);作用释放空间,避免出现楼主提问的问题

土冒
2005-08-07 12:50
xucm
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-8-8
得分:0 
其实只需要改一个地方: ... struct List *creat(void){ struct List *head; struct List *p,*p1,*p2; p1=p2=(struct List *)malloc(LEN); scanf("%d",&p1->elem); p=head=p1; /*这里*/ ... 出现NUll pointer assignment的原因是:有指针未赋具体地址就使用了。p=head=null;之后你直接用了p->size。是无效的。

[此贴子已经被作者于2005-8-8 9:29:35编辑过]

2005-08-08 09:28
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
得分:0 
谢谢大家的帮助

我本菜鸟, 请多关照
2005-08-08 20:53
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
得分:0 
   我p1=NULL是为了悬空指针。怕出意外. 编程良好习惯

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-08-09 01:28
txbhj
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2004-12-19
得分:0 
但是我把free(p1)好像不行哟

我本菜鸟, 请多关照
2005-08-09 06:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-24559-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024830 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved