鱼C论坛

 找回密码
 立即注册
查看: 828|回复: 1

[争议讨论] 直接插入排序小甲鱼代码有漏洞

[复制链接]
最佳答案
1 
发表于 2015-3-12 18:34:38 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
刚才看了小甲鱼老师的数据结构第90集,讲插入排序,讲完我自己敲一遍,运行前代码完全跟小甲鱼一样,但是,我的一运行就报错,调试下,是第二个for循环j--越界了!! 循环里面没有对j的可行性进行检查,我自己添加了一个 &&j >=0   运行成功(对于不同数据检测时j--
可以让j小于0)。 百度了下,百度上的代码有&&j>-1,哈哈,第一次发现小甲鱼老师代码漏洞! 可能是忙的时候疏忽了这个!
  1. void InsertSort(int *k,int n)
  2. {
  3.     int i,j,temp;
  4.     for(i = 1; i < n;i++)
  5.     {
  6.         if(k[i] < k[i-1])
  7.         {
  8.             temp = k[i];
  9.             for(j = i-1;k[j] > temp&&j >=0;j--)
  10.             {
  11.                 k[j+1] = k[j];
  12.             }
  13.             k[j+1] = temp;
  14.         }
  15.     }
  16. }
复制代码
最佳答案
0 
发表于 2018-1-2 23:30:37 | 显示全部楼层
哇,我还以为自己错了呢,结果还真是小甲鱼这个小坑货代码有缺陷,幸好来这里search一下,他的代码好像没有设监视哨,倒置越界访问了。
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号 )

GMT+8, 2018-7-16 14:11

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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