C语言创建单链表 c语言运行显示该内存不能为read

今天看啥 热点:
一个C语言链表程序,帮忙看下哪出错了
代码已编译通过,结果在运行时出现了“内存不能为read”的错误。代码如下#include &stdio.h&#include &stdlib.h&typedef struct LNode{
struct LNode *}LNode, *LinkLvoid CreatLinkList();void DisplayLinkList();int main(){ LinkList L; CreatLinkList(L, 10); DisplayLinkList(L); return 0;}void CreatLinkList(LinkList L, int n){ LNode *p;
L = (LinkList)malloc(sizeof (LNode));
L -& next = NULL;
for(i=0; i&n; i++)
p = (LinkList)malloc(sizeof(LNode));
scanf(&%d&, p-&data);
p-&next = L-&
L-&next = }}void DisplayLinkList(LinkList L){ LNode *p; p = L; while(p) {
printf(&%d&, p-&data);
p = p-& }}在伊次输入10个数之后点回车,程序出错了,如图请达人帮忙解决,不胜感激!问题补充:
/*错的地方还不少,主要有以下几点
1.使用malloc函数没有包含其头文件。
2.s_union最后缺个“}”。
3. printf_s函数里面printf(&%c&,p-&p=p-&);应改为printf(&%c&,p-&ch);p=p-&
4.某些地方s对象的成员x写成了其他字符串。
以上是语法错误,还存在编译不报错的逻辑错误,如下
5.s_union合并算法错误。
6. s_create采用链表前插法,这样得到的字符序列与输入相反。
此外还有一些其他编写不太好的地方,一并修正,得到如下结果
#include&stdio.h&
#include&malloc.h&
typedef struct node
s* s_create(int* length)
s *p,*head,*
head=tail=(s*)malloc(sizeof(s));
head-&next=NULL;
scanf(&%c&,&ch);
(*length)++;
while(ch!='\n')
p=(s*)malloc(sizeof(s));
p-&next=NULL;
tail=tail-&next=p;
(*length)++;
scanf(&%c&,&ch);
void s_union(s* head1,s* head2)
s *p=head1-&next,*q=head2-&next,*temp1,*temp2;
while(q!=NULL)
p-&next=q;
p=q-&next=temp1;
void printf_s(s* head)
s *p=head-&
while(p){printf(&%c&,p-&x);p=p-&}
printf(&\n&);
int main()
s *head1,*head2;
int length1=0,length2=0;
head1=s_create(&length1);
head2=s_create(&length2);
printf_s(head1);
printf_s(head2);
if(length1&length2)s_union(head1,head2);
else s_union(head2,head1);
printf_s(head1);
}帮客之家推荐:
void CreatLinkList(LinkList L, int n)之后,L被释放,L仍然为之前的空指针,你再传进DisplayLinkList(LinkList L)打印数据时,自然提示错误;修改void CreatLinkList(LinkList L, int n)为LNode *CreatLinkList(LinkList L, int n),让其返回一个指针赋予L,就能正确运行。完整改正代码如下LNode *CreatLinkList();main函数里面: L = CreatLinkList(L, 10);LNode *CreatLinkList(LinkList L, int n) 里面,最后增加return L-&
while(p) {
//顺序调换一下,你的链表有个空数据的头。 printf(&%d&, p-&data); }}
我也遇到这个问题,还没解决
四楼都解释清楚了
链表创建和释放空间是2个大bug函数参数不对应和输入没地址&是小bug,输出带空格是基本美观调试完全正确如下#include &stdio.h&#include &stdlib.h&typedef struct LNode{
struct LNode *}LNode, *LinkLLinkList CreatLinkList(int);
//修改,参数与后面不对呀,增加返回指针void DisplayLinkList(LinkList);
//修改,参数与后面不对呀int main(){
LinkList L;
//void CreatLinkList(LinkList L, int n)空谈
//出了函数数据全丢失了,应该把链表的头指针返回给L
//每次p-&next = L-&next都=NUL,链表没连接起来
L=CreatLinkList(10);
//大修改
DisplayLinkList(L);
//函数正确
//动态分配了空间,请程序结束的地方释放它
return 0;}LinkList CreatLinkList(int n){
LinkList L;
//保存头
//链表赋值指针
L = (LinkList)malloc(sizeof (LNode));
//至少给头分配一个
L -& next = NULL;
//p从头开始
for(i=0; i&n; i++)
scanf(&%d&, &p-&data);
//保存输入的地址前要加&
if ( i==n-1 )
//尾巴,指针指向空
p-&next=NULL;
//不是尾巴,指针开辟空间
p-&next = (LinkList)malloc(sizeof(LNode));
......余下全文>>
相关搜索:
相关阅读:
电脑安全最近更新C语言程序运行出现内存不能为read【c语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:534,344贴子:
C语言程序运行出现内存不能为read收藏
#include&stdio.h&#include&math.h&#include&stdlib.h&/*定义*/ #define N 4/*函数原型声明*/int select_menu();/*菜单选择函数*/ /*主函数开始*/int main(){ double a,b,c,d, while(1) {
switch(select_menu())
printf("enter a and b\n");
scanf("%d%d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
printf("enter a and b\n");
scanf("%d%d",&a,&b);
printf("%d-%d=%d\n",a,b,a-b);
printf("enter a and b\n");
scanf("%d%d",&a,&b);
printf("%d*%d=%d\n",a,b,a*b);
printf("enter a and b\n");
scanf("%d%d",&a,&b);
printf("%d/%d=%d\n",a,b,a/b);
} /*除法*/
printf("enter a and b\n");
scanf("%d%d",&a,&b);
a=(a+b)/2;
printf("average=%d\n",a);
}/*平均数*/
printf("enter a\n");
scanf("%d",&a);
printf("sin%d=%d\n",a,sin(a));
}/*正弦 */
printf("enter a\n");
scanf("%d",&a);
printf("cos%d=%d\n",a,cos(a));
case 0:exit(0);
} } }int select_menu(){ char *menu[]={"**********Menu**********\n",
1.两数相加\n",
2.两数相减\n",
3.两数相乘\n",
4.两数相除\n",
5.求两数的平均值\n",
6.正弦\n",
7.余弦\n",
0.退出\n",
"***************************\n"}; int i,sele_ for(i=0;i&19;i++)
printf("%s",menu[i]);
/*输出菜单项*/ do {
printf("Enter your choice(0~10):");
/*提示信息*/
scanf("%d",&sele_no);
/*输入选择项*/
}while(sele_no&10||sele_no&0); /*输入值必须在0~10之间*/
return sele_}一读取建立就不行就必须关闭 那位大神能解决的了这个问题啊!非常感谢啊!
登录百度帐号推荐应用欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 2883 人关注过本帖
标题:内存不能为read
等 级:论坛游民
帖 子:53
专家分:25
结帖率:66.67%
&&问题点数:0&&回复次数:10&&&
内存不能为read
我的代码是这样的:
#include &stdio.h&
struct type
&&& char name[10];
main(void)
&&& FILE *f1;
&&& f1=fopen(&c:\king.dat&,&rb&);
&&& while(!feof(f1))
&&& fread(&std,sizeof(struct type),1,f1);
&&& printf(&%s,%d,%d&,std.name,std.age,std.haoma);
在VC++里能调试出来,
但实际运行就会出现什么内存不能为read!!我自己研究了好久都不知道错在哪里?
搜索更多相关主题的帖子:
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注意你fopen的路径表示,我没记错的话,C中是要用双杠~~~~
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
判断一下f1是否可用。
离恨恰如春草,更行更远还生。
等 级:论坛游民
帖 子:53
专家分:25
f1是可用的 我用IF判断过
等 级:论坛游民
帖 子:17
专家分:36
注意,不能为read就是说你所涉及的东西超出了你所定义的范围,比如定义数组int a[4],在输出a[4]时就会说不能为read,只能到a[3],你自己再好好看看吧!
等 级:论坛游民
帖 子:53
专家分:25
不是这样的啊 !我的字符数组里只存KING这4个字符不存在你所说的!我用fgetc(f1);也是一样的
等 级:侠之大者
帖 子:212
专家分:455
#include &stdio.h&
struct type
&&& char name[10];
main(void)
&&& FILE *f1;
&&& f1=fopen(&c:\\king.dat&,&rb&);
&&& while(!feof(f1))
&&& fread(&std,sizeof(struct type),1,f1);
&&& printf(&%s,%d,%d&,std.name,std.age,std.haoma);
等 级:职业侠客
帖 子:90
专家分:361
回复 楼主 keybord
#include &stdio.h&
struct type
&&& char name[10];
main(void)
&&& FILE *f1;
&&& f1=fopen(&c:\king.dat&,&rb&);
&&& while(!feof(f1))
&&& fread(&std,sizeof(struct type),1,f1);
&&& printf(&%s,%d,%d&,std.name,std.age,std.haoma);
有几点疑问 你看下
!feof(f1)这个函数没有贴出来。。。
printf 输出应该有问题把? //掉&&换个测试打印看看
还有一点就是 你没有为你结构体 申请空间malloc ..一旦循环过一次后,第二次有可能内存就越界了。。。
[ 本帖最后由 hanzhenddd 于
20:57 编辑 ]
等 级:职业侠客
帖 子:287
专家分:335
&c:\king.dat& -& &c:\\king.dat&
lz好好想想这是为什么
此外 error处理也要写出来 便于找原因
8楼的问题很低级无趣。std又不是指针,是一个实实在在的全局定义,何来malloc之有?
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
回复 9楼 邶风
..终于有人支持我了。。
版权所有,并保留所有权利。
Powered by , Processed in 0.049833 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved#include&stdio.h&
#include&stdlib.h&
#define N 6
int main()
typedef struct st
struct st *
node *p, *q, *h;
p = (node *)malloc(sizeof(node));
for (int i = 0; i & N; i++)
p-&num = i + 0;
q = //保存已完成的数据的地址
if(i==N-1)
p-&next=NULL;
p = (node *)malloc(sizeof(node));//开辟新的地址
q-&next =//让完成数据的地址和新的地址关联
printf("%d\n", p-&num);//输出当前节点的数据
//更新到下一节点的地址
//更新下一节点
system("pause");
}请各位大神帮忙看下,是否让申请的内存充分利用,释放的时候应该都释放了吧?在这个代码里我没有用到 h-&next ,我觉得反正 h 这个领头的也不存数据, 用h 和h-&next应该没区别吧?
暂无任何回答
21581人关注
13025人关注
69231人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2

我要回帖

更多关于 创建单链表 的文章

 

随机推荐