gcc 调试中出现 段错误

陆歆雨 2013-08-09 10:19:13

#include<stdio.h>

int zheban(int a[] ,int n,int k){
int low,high,mid;
low=0;high=n-1;
while(low<=high){
mid=(low+high)/2;
if(a[mid]>k) high=mid-1;
else if(a[mid]=k) return(mid);
else low=mid+1;
}
return -1;
}

int main()
{
int a[8]={10,23,33,45,43,13,67,84};
int k,i;
scanf("%d",&k);
zheban(a,8,k);
if(i!= -1)
printf("a[%d]=%d\n",i,a[i]);//gdb 调试此处出现错误
else
printf("not found");
}
...全文
89 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-08-09
  • 打赏
  • 举报
回复
进程意外退出会在当前目录下产生‘code’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令
陆歆雨 2013-08-09
  • 打赏
  • 举报
回复
不是这样的 i=zheban(a,8,k);
图灵狗 2013-08-09
  • 打赏
  • 举报
回复
i未初始化就用,导致数组访问越界。
引用 楼主 u011603569 的回复:
#include<stdio.h> int zheban(int a[] ,int n,int k){ int low,high,mid; low=0;high=n-1; while(low<=high){ mid=(low+high)/2; if(a[mid]>k) high=mid-1; else if(a[mid]=k) return(mid); else low=mid+1; } return -1; } int main() { int a[8]={10,23,33,45,43,13,67,84}; int k,i; scanf("%d",&k); zheban(a,8,k); if(i!= -1) printf("a[%d]=%d\n",i,a[i]);//gdb 调试此处出现错误 else printf("not found"); }
xiaoyaoxiaonizi 2013-08-09
  • 打赏
  • 举报
回复
弱弱地问下,楼主的i干嘛用的?没赋值吧?估计i是个乱数,导致a[i]越界了。最好将判断条件改下,使数组不可能越界。
mujiok2003 2013-08-09
  • 打赏
  • 举报
回复
你的数组没有排序,不能折半查找。
mujiok2003 2013-08-09
  • 打赏
  • 举报
回复
//if(i!= -1)
if(0 < i && i < 8)
 printf("a[%d]=%d\n",i,a[i]);//gdb 调试此处出现错误

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧