笔者编写了一个简单的冒泡排序,发现这样一个问题
8 #include "sort_h.h" |~
9 void sort_t(int *a, int n) |~
10 { |~
11 int i,j,temp; |~
12 |~
13 for(i=0 ; i< n - 1 ;i++){ |~
14 for(j=0 ; j< n-i ;j++){ |~
15 if(a[j] > a[j+1]){ |~
16 temp = a[j]; |~
17 a[j] = a[j+1]; |~
18 a[j+1] = temp; |~
|~
19 } |~
20 } |~
21 } |~
22 } |~
23 |~
24 void print_sort(int *a, int n) |~
25 { |~
26 int i; |~
27 printf("n: %d\n",n); |~
28 for(i = 0 ;i < n ; i++){ |~
29 printf("%d\t",*(a++)); |~
30 } |~
31 putchar(10); |~
32 }
5 int main() |▼ functions
6 { | main
7 int a[10],b[10]; |~
8 |~
9 int i,j; |~
10 for(i=0;i<10; i++){ |~
11 printf("enter num: "); |~
12 scanf("%d",&a[i]); |~
13 } |~
14 sort_t(a,10); |~
15 print_sort(a,10); |~
16 |~
17 return 0; |~
18 }
用C89编译程序,会报栈异常错误打印信息如下:
0 -802020096 1 2 3 4 5 6 7 8
*** stack smashing detected ***: ./main terminated
已放弃 (核心已转储)
用C99 编译程序,程序运行正常。
用C89编译时去掉程序29行中的 \t 后成需也可以正常运行。暂时还没有找到原因。