簡體   English   中英

分段錯誤(核心已轉儲)Codelite Ubuntu

[英]Segmentation fault (core dumped) codelite ubuntu

我正在嘗試使用冒泡排序方法來組織矩陣。 我收到一個錯誤,提示細分錯誤(核心已轉儲)。 我正在使用Ubuntu和Codelite在虛擬機上編程。 希望你能幫助我。

這是代碼。

#include <stdio.h>
#include <stdio.h>
#include <math.h>

int main(){

    int tam, comp, var;

    printf("Ingrese el tamano del array que va a crear:\n");
    scanf("%d", tam);

    int arr[tam];

    printf("Ingrese los elementos del array:\n");
    for(int i=0; i < tam; i++){
        printf("Elemento arr%d", i+1);
        scanf("%d", &arr[i]);        
    }

    for(int j=0; j < tam; j++){
        for(comp=0; comp<tam; comp++){

            if(arr[comp]<arr[comp+1]){

                var=arr[comp];
                arr[comp]=arr[comp + 1];
                arr[comp + 1]=var;               
            }
        }            
    }

    printf("La matriz en orden descendente es:\n");

    for(int i=0; i < tam; i++){

       printf("%d ", arr[i]);        
    }
}

以下建議的代碼:

  1. 干凈地編譯(Linux上的gcc)
  2. 執行所需的操作
  3. 不分段故障
  4. 更正問題注釋中列出的問題
  5. 正確檢查I / O錯誤並將錯誤消息正確路由到stderr
  6. 使數據與使用位置緊密相關。
  7. 利用適當的水平間距以提高可讀性
  8. 說明為什么要包含每個頭文件

建議對不包含任何格式的輸出使用puts()而不是printf()

現在建議的代碼:

#include <stdio.h>    // printf(), scanf(), fprintf(), stderr
//#include <math.h>  <<-- contents not used, so do not include
#include <stdlib.h>   // exit(), EXIT_FAILURE

int main( void )
{
    int tam;

    printf( "Ingrese el tamano del array que va a crear:\n" );
    if( 1 != scanf( "%d", &tam ) )
    {
        fprintf( stderr, "scanf for 'tam' failed\n" );
        exit( EXIT_FAILURE );
    }

    // implied else, scanf successful


    int arr[tam];

    printf( "Ingrese los elementos del array:\n" );
    for( int i=0; i < tam; i++ )
    {
        printf( "Elemento arr%d", i+1 );
        if( 1 != scanf( "%d", &arr[i] ) )
        {
            fprintf( stderr, "scanf for array entry %d failed\n", i+1 );
            exit( EXIT_FAILURE );
        }

        // implied else, scanf successful.
    }

    for( int j=0; j < tam; j++ )
    {
        for( int comp=0; comp < (tam-1); comp++ ) // note correction and data scope limiting
        {

            if( arr[comp] < arr[comp+1] )
            {
                int var       = arr[comp];  // note data scope limiting
                arr[comp]     = arr[comp + 1];
                arr[comp + 1] = var;
            }
        }
    }

    printf( "La matriz en orden descendente es:\n" );

    for( int i=0; i < tam; i++ )
    {
       printf( "%d ", arr[i] );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM