Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    segmentation fault (core dumped)

    Ciao a tutti sono alle prime armi con la programmazione in c, e dopo aver compilato con successo il file in allegato, l'ho eseguito; il problema è che nel punto in cui c'è lo scambio tra l'elemnto più alto nella matrice con l'elemento più basso appare la scritta segmentation fault (core dumped), la cosa strana e che se inserisco dei numeri con 1 o 2 cifre il programma viene eseguito con successo, ma il 98% delle volte appare quel mex....Cosa posso fare?

    codice:
    #include<stdio.h>
    
    # define N 6
    
    /* inizio main */
    main()
    {
     int mat[N][2], i, k, voto, matricola, min, max, x, y;
     
    //inizio acquisizione dati
     for(i=0; i<N; i++)
     {
      printf("\nInserire la matricola:\n");
      scanf("%d", &mat[i][0]);
      printf("\nInserire il voto:\n");
      scanf("%d", &mat[i][1]);
     }
    //fine acquisizione dati
    
    //inizio stampa 1
     printf("\nStampa della matrice inserita\n");
     printf("\nmat     voto\n"); 
     for(i=0; i<N; i++)
       printf("%d     %d\n", mat[i][0], mat[i][1]);
    //fine stampa 1
    
    //inserimento voto da cercare
     do
     {
      printf("\nInserire un voto da cercare compreso tra 18 e 30\n");
      scanf("%d", &voto);
     }
     while(voto<18 || voto>30);
    //fine inserimento
    
    //inizio ricerca per voto
     k=0;     //valore bandiera
     printf("\nMatricole che hanno ottenuto %d:\n",voto);
     for(i=0; i<N; i++)
     {
      if(mat[i][1]==voto)
      {
       k=1;
       printf("%d\n", mat[i][0]);
      }
     }
      if(k==0)
        printf("Nessuna!\n");
    //fine ricerca per voto
    
    //inserimento matricola da cercare
     printf("\nInserire la matricola da cercare\n");
     scanf("%d", &matricola);
    //fine inserimento
    
    //inizio ricerca per matricola
     k=0;     //valore bandiera
     printf("\nLa mat. %d ha conseguito l'esame?:\n",matricola);
     for(i=0; i<N && k==0; i++)
     {
      if(mat[i][0]==matricola)
      {
       k=1;
       printf("Esame sostenuto!\n");
      }
     }
      if(k==0)
        printf("Esame non sostenuto!\n");
    //fine ricerca per matricola
    
    //scambio matricola più alta con più bassa
     min=mat[0][0];
     max=mat[0][0];
     for(i=1; i<N; i++)
     {
      if(min>mat[i][0])
      {
       min=mat[i][0];
       x=mat[i][1];
      }
      if(max<mat[i][0])
      {
       max=mat[i][0];
       y=mat[i][1];
      }
     }
     
     mat[x][0]=max;
     mat[x][1]=y;
    
     mat[y][0]=min;
     mat[y][1]=x;
    //fine scambio matricole
    
    //inizio stampa 2
     printf("\nStampa della matrice ottenuta\n");
     printf("\nmat     voto\n"); 
     for(i=0; i<N; i++)
       printf("%d     %d\n", mat[i][0], mat[i][1]);
    //fine stampa 2
    
    
    }
    /* fine main */
    jonsnow

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303

    Moderazione

    Anche per te le stesse considerazioni fatte qui.


    Correggo e metto a posto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nello scambio, se il minimo è il primo elemento, x quanto vale?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Non controlli i valori di x ed y. Quindi quando l'utente inserisce un numero maggiore di 5, hai un comportamento indefinito per sforamento vettore.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.