_温水青蛙_ 2017-06-13 14:39 采纳率: 100%
浏览 1465
已采纳

同样一个程序vc编译后可以运行gcc编译后不能运行

#include<stdio.h> 
// 打印结果 
void Show(int arr[], int n) 
{ 
    int i; 
    for ( i=0; i<n; i++ ) 
    printf("%d ", arr[i]); 
    printf("\n"); 
} 

//希尔排序 按从小到大排序 
void ShellSort(int arr[], int n) 
{ 
    int i, j, k; 
    int temp, gap; 

    for (gap = n / 2; gap > 0; gap /= 2) //步长的选取 
        { 
                for (i = 0; i < gap; i++) //直接插入排序原理 
                    { 
                            for (j = i+gap; j < n; j += gap) //每次加上步长,即按列排序。 
                                    {
                                                temp=arr[j];
                                                for(k=j;k>0&&arr[k-gap]>temp;k-=gap)
                                                        {
                                                                arr[k]=arr[k-gap];
                                                        }
                                                arr[k]=temp;
                                    }
                    }
        }
}

int main()
{
    int arr_test[13]={81,94,11,96,12,35,17,95,28,58,41,75,15};
    Show(arr_test,13);
    ShellSort(arr_test,13);
    Show(arr_test,13);
    return 0;
}

以上为程序清单,在Windows上vs2015可以正确运行,但在Ubuntu14.04下,终端输入gcc -o shellsort shellsort.c成功编译,但在运行时出现错误:81 94 11 96 12 35 17 95 28 58 41 75 15
段错误 (核心已转储)
,是啥情况?

  • 写回答

3条回答 默认 最新

  • _温水青蛙_ 2017-06-14 02:41
    关注

    自己回答,就是数组越界,在最内层循环时,会遇到k-gap<0的情况,此时查看发现arr{k-gap】为一个特别大的值,进入循环导致出错。
    但是在vs下,就这个程序而言,越界的数组值均为一个极小的负值,不会进入循环,因此不会出错

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 钢岔管添加弹性约束模拟围岩作用
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题