| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2091 人关注过本帖
标题:C语言文件处理问题!找不到错误原因,求大神帮忙!
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你確實跟蹤出程序在calloc()那一行崩潰?

授人以渔,不授人以鱼。
2016-01-16 23:40
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
楼主代码在codeblocks里的确可以通过编译,经调试发现是在sprintf(len,"%d\n", max[i])出现内存访问错误,因为这时max已经指向0(NULL)了,导致max指向NULL的语句是paixu(&max, cons).在max为数组时,&max相当于&max[0],在函数参数里复制了一个地址值,相当于指针,但由于你已经定义max为指针了,&max相当于传送指针变量地址过去,排序相当于是对一个二级指针排序,你原始数据多读一个空行,所以实际数据是12 65 94 35 16 54 95 0,排序后会把0送入max【0】的地址,就是将max的指向修改为NULL了,所以在执行sprintf会出现访问无效内存的错误提示。将paixu(&max, cons);修改为paixu(max, cons);即可在codeblocks里正常编译执行。
实际上你对fgets、calloc和paixu传二级指针在其他编译器里根本通不过编译。calloc返回是void,要传给int指针必须强制转换(int*)calloc才能通过编译。

能编个毛线衣吗?
2016-01-17 07:32
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 12楼 wmf2014
更正:既然是对二级指针排序,已经和你文件里提供的内容无关了,最后max[0]=0是以max地址为顺序的栈里随机的值,正常情况下,这种排序会影响main函数里定义的其他变量值。

能编个毛线衣吗?
2016-01-17 08:03
justcavalli
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-3-22
收藏
得分:0 
只能说语法上确实没有问题,但是在逻辑上是有漏洞的
2016-03-22 14:29
快速回复:C语言文件处理问题!找不到错误原因,求大神帮忙!
数据加载中...
 
   



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

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