鱼C论坛

 找回密码
 立即注册
查看: 1388|回复: 4

教材上的代码敲进去运行错误,不知道有什么问题

[复制链接]
发表于 2016-2-24 12:34:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 阿飞。 于 2016-2-24 14:57 编辑

字符串由小到大顺序输出,用指针数组作形参,不知道有什么问题,请大家帮忙看看
捕获1.PNG
捕获2.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-24 13:56:17 | 显示全部楼层
有什么错误呢?
void print(char *name[],int n);
void sort(char *name,int n);
开头加上这些。如果还有的话,把运行信息发出来,要不然别人怎么知道出了什么错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-24 21:30:57 | 显示全部楼层
最好把代码以代码的格式贴出来吧,这样我们也好复制代码然后在debug,你不能让我们把你图片中的代码敲一遍吧。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 15:33:47 | 显示全部楼层
错误代码:{temp=name[j];name[j]=name[k];name[k]=temp;}
崩溃原因:name[j]=name[k]; 这一句name[j]正好指向了了调用者的堆栈空间,name[k]的值 直接赋值给main的返回值。  mainret = main(int, int, int);   name[j] 此时就指向 mainret 调用者的堆栈空间。
而你name虽然是局部堆栈空间,但你存放的是一个指针数组,每一个元素都是指向常量空间。你的main返回值赋给一个常量空间,系统自然会抛一个0xc0000005 访问异常的错误。
错误分析:name[j]  j 的结果受第二个for循环控制。而你赋值的地方,已经超过for的边界。再离开第二个FOR之前程序还会做一次自加操作。所以下面会越界。既然你说是抄的,那应该是你将i错抄成j了。
个人建议:以后抄代码,把该加的括号加上。那样也不会再犯类似的错误了。
解决方案:name[j] 改成 name[i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-27 10:06:20 | 显示全部楼层
半斤八兩 发表于 2016-2-25 15:33
错误代码:{temp=name[j];name[j]=name[k];name[k]=temp;}
崩溃原因:name[j]=name[k]; 这一句name[j]正好 ...

@半斤八两 果然是我抄错了,不知道自己眼睛怎么长的,核对了好几遍都没看出来,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表