请教:为什么同一程序结果不同

rocllllll 2003-10-21 08:46:55
为什么以下程序在Tc下执行正确,在VC6下却执行失败,
系统提示"该内存不能为只读"之类的错误
#include "stdio.h"
#include "stdlib.h"

typedef struct node
{
char data;
struct node *next;
}NODE;

void creat(NODE **head)
{
NODE *p,*q;
char ch;
p=NULL;
q=NULL;
while((ch=getchar())!='\n')
{
p=(NODE *)malloc(sizeof(NODE));
p->data=ch;
if(!(*head))
(*head)=p;
else
q->next=p;
q=p;
}
if(q) q->next=NULL;
}

void print(NODE *head)
{
NODE *p;
p=head;
while(p)
{
printf("%c",p->data);
p=p->next;
}
}

main()
{
NODE **head;
head=NULL;
creat(head);
print(*head);
getchar();
return 0;
}
...全文
37 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocllllll 2003-10-23
  • 打赏
  • 举报
回复
虽然问题没解决,还是先结贴吧,谢谢大家!!
rocllllll 2003-10-22
  • 打赏
  • 举报
回复
事情是这样的:
在复习C语言的链表时,我发现个版本的Creat函数,都是带返回值的,Node *Head不是
传进去的,后来我测试了不管传与不传,只要return头指针,就是对的,当时没深究,在我
看到二叉树建树的时候才发现,这个问题对于理解C的指针和指向指针的指针很有好处,
目前我在复习,我的MSN号码(rock_li77@hotmail.com),如能明白,一定给分!!!
sandrowjw 2003-10-22
  • 打赏
  • 举报
回复
sorry,糊涂了,不应该用NODE **head,应该直接用NODE *head

然后
create(&head);
print(head);

前面几位说的都不错。
rocllllll 2003-10-22
  • 打赏
  • 举报
回复
我测试添加*head = NULL;
程序在这一句出错,没加以前,在if(!(*head))出错
请兄弟们帮帮忙,小弟不知怎么回事?
ZhouHM 2003-10-21
  • 打赏
  • 举报
回复
是因为对NULL有读操作:

TC下由于对于NULL即0地址只是做读操作,所以不会引起编译及运行时错误的。

但是在vc下,由于win32对于从0x0到0xffff的地址空间是保护的,所以读0地址会产生访问错误

呵呵,我也是刚学到的!
langzi8818 2003-10-21
  • 打赏
  • 举报
回复
UP
tibetan 2003-10-21
  • 打赏
  • 举报
回复
随便谈谈VC和TC的区别。
整体来说在VC下编译程序他的要求更严格一点,他对类型的检测,和一些潜在的错误有很好的检测,也就是说你的程序虽然能在TC下编译,但是或许就不能在VC下编译通过。但是你如果在VC下编译同过了,那你的程序 也会很快的正确的执行,但是TC不一定。
njuhuangmy 2003-10-21
  • 打赏
  • 举报
回复
因为 你对 NULL 地址的内存 有操作 啊!!

if(!(*head))
你create 传过来的 head 是 NULL , 取 NULL 的内容, 这里过不去!!

sandrowjw 2003-10-21
  • 打赏
  • 举报
回复
main()
{
...
head = NULL;
*head = NULL;//加这一句应该就行了
hcj2002 2003-10-21
  • 打赏
  • 举报
回复
在TC下可以编译的程序在vc下未必可以通过,这是编译器的设置和对代码的规范不同
sharkhuang 2003-10-21
  • 打赏
  • 举报
回复
go
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧