标题: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



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




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

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