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

同样一个程序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条)

报告相同问题?

悬赏问题

  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)