注册 登录
编程论坛 C语言论坛

求各位大佬解释一下段错误,我程序里有个段错误但是找不到啊。

魂之子 发布于 2020-05-16 13:28, 1620 次点击
我在网上也找了一些段错误的说明,好像主要就是数组越界,要不就是修改const的变量,但是我没发现我的代码里有段错误的东西啊,求大佬指正。

#include<stdio.h>
void bubblesort(int arr[], int n)
{
    int i, j;
      int tmp;
    for(i = 0; i < n - 1; i++)
    {
        for(j = 1; j < n; j++)//&Atilde;&iquest;×&szlig;&Ograve;&raquo;±é&pound;&not;&frac34;&Iacute;&Otilde;&Ograve;&micro;&frac12;&Ograve;&raquo;&cedil;&ouml;&micro;±&Ccedil;°×&icirc;&acute;ó&micro;&Auml;&Ecirc;&yacute;&pound;&not;&Ecirc;&sup1;&AElig;&auml;&Aring;&Aring;&micro;&frac12;&cedil;&Atilde;&Oacute;&ETH;&micro;&Auml;&Icirc;&raquo;&Ouml;&Atilde;
        {
            if(arr[j] < arr[j - 1])
            {
                tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;
            }
        }
    }
}
int sum(int arr[], int n){
    int i,sum=0;
    for (i=0; i<n; i++){
        sum+=arr[i];
    }
    return sum;
}

int main(){
    int a[10001]={0};
    int b,k;

    scanf("%d",&b);
        int n=b;
    for (k=0; k<n; k++){
        scanf("%d",&a[k]);
    }
    bubblesort( a, n);
    int i=0;
    int sum1=sum(a,n/2);
    int sum2= sum(&a[n/2],n-n/2);
    int fsum=sum2-sum1;
    printf("Outgoing #: %d\nIntroverted #: %d\nDiff = %d",n-n/2,n/2,fsum);
   
    return 0;
}
4 回复
#2
forever742020-05-16 18:55
段错误不是编译错误,是运行错误。
你运行截图啊。
#3
forever742020-05-16 18:58
另外,两个循环搭配不对,这样是冒不起泡的。
起码得让内循环和外循环相关才有意义吧。

[此贴子已经被作者于2020-5-16 19:00编辑过]

#4
魂之子2020-05-17 11:06
回复 3楼 forever74
https://
就是这题大佬,能帮看一眼吗?
#5
rjsp2020-05-17 12:04
程序代码:
#include <stdio.h>
#include <stdlib.h>

/*
void bubblesort( unsigned arr[], size_t n )
{
    for( size_t i=0; i<n-1; ++i )
    {
        for( size_t j=1; j<n-i; ++j )
        {
            if( arr[j] < arr[j-1] )
            {
                unsigned tmp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tmp;
            }
        }
    }
}
*/
int unsigned_cmp( const void* pa, const void* pb )
{
    unsigned a = *(unsigned*)pa;
    unsigned b = *(unsigned*)pb;
    if( a < b ) return -1;
    if( a > b ) return +1;
    return 0;
}

unsigned sum( const unsigned arr[], size_t n )
{
    unsigned result = 0;
    for( size_t i=0; i!=n; ++i)
        result += arr[i];
    return result;
}

int main( void )
{
    unsigned n;
    scanf( "%u", &n );

    unsigned a[100000];
    for( size_t i=0; i!=n; ++i)
        scanf( "%u", &a[i] );

    // bubblesort( a, n);
    qsort( a, n, sizeof(*a), &unsigned_cmp );

    unsigned sum1 = sum( a, n/2 );
    unsigned sum2 = sum( &a[n/2], n-n/2 );
    unsigned fsum = sum2-sum1;
    printf("Outgoing #: %u\nIntroverted #: %u\nDiff = %u\n", n-n/2, n/2, fsum );
}
1