Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91526
  • 博文数量: 16
  • 博客积分: 367
  • 博客等级: 一等列兵
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-25 22:37
文章分类

全部博文(16)

文章存档

2012年(4)

2011年(12)

我的朋友

分类: C/C++

2011-11-28 19:30:57

要求:1.用数组存储要排序的数,找到最大的数后,排到最后
      2.递归调用实现所有排序

开始写了源程序如下:
#include

void selection_sort(int n, int a[n])
{
int i, max = 0, tmp = 0;
if(n == 0) return;
/********find the maxmum*******/
for(i = 0; i < n; i++){
if(a[max] <= a[i])
max = i;
}

/***********exchange the maxmum to the end************/
tmp = a[max];
a[max] = a[n];
a[n] = tmp;
selection_sort((n - 1), a);

}

void print_array(int n, int a[n])//print array
{
int i;
for(i = 0; i
printf("%d ", a[i]);
}
printf("\n");
}

int main()
{
int a[4] = {2, 3, 1, 4};
selection_sort(4, a);
print_array(4, a);
return 0;

}
编译运行发现,程序崩溃了...开始以为是自己逻辑实现有缺陷,查看了半天,也没看出来啥问题....后来没办法,用gdb进行调试,发现程序运行到最后了,突然就冒出来这句:....被搞的有点莫名其妙,看不出问题,郁闷了好久,只好又耐着性子一行一行的查参数的值,后来发现a[max]的值在函数调用的过程中突然变了一串奇怪的数字(明显没初始化过的),再返回看源码,发现是自己粗心,把a[max]和a[n]交换时a[n]的下标写错了(数组下标使用该从0开始!)..于是改成n-1,问题解决。粗心害死人呐!

ps:gdb调试的时候,最后出的这个信息也起了误导作用,为什么会在main函数执行到最后才出来这个崩溃的信息还不清楚...为什么不在函数调用的时候崩溃?gdb还用的不熟悉,原理不详- -,各位大大知道的指点一二吧~~
阅读(2123) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

sunny_piza2012-01-03 14:18:27

数组越界是参见错误。越界之后, 不一定立即就能显现崩溃的效果。