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

    [C] errore di segmentazione in strutture

    Salve a tutti mi stavo cimentando in questo esercizio il quale prevede di stampare un elenco attraverso una struttura definita di tipo contatto!!!le successivamente crare un array di tipo contatto ordinato che ordini gli elementi dell'array precedente.All'avvio del programma mi fà inserire da imput gli elementi dell'array.dopo questo compare l'errore disegmentazione.non riesco a capire il perchè.Allego e ringrazio in anticipo chiunque!!ex7-es7h.txt [ATTACH]24517[/ATTACH ]ex7-es7mainc.txt
    File allegati File allegati

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non è comodo scaricare file sorgenti per valutare i problemi.

    Se vuoi un aiuto è meglio che posti (come sempre) il codice interessato nel tuo post nel forum e ci indichi più o meno dove c'è l'errore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ok scusate non lo sapevo!!!!


    FILE MAIN

    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include "ex7-es7.h"
    #define N 4
    
    
    int main(){
        int ris;
        int x;
        Contatto rubrica[10];
        Contatto elementi[N];
        Contatto temp;
        inserimentoDati(elementi);
        stampaContatto(elementi[0]);
        for(int k=0;k<N;k++){
            for(int j=k+1;j<N;j++){
                x=strcmp(elementi[k].cognome,elementi[j].cognome);
                if(x>0){
                    temp=elementi[k];
                    elementi[k]=elementi[j];
                    elementi[j]=temp;
                }
            }
        }
        for(int y=0;y<N;y++){
            rubrica[y]=elementi[y];
        }    
        ris=inserisciContatto(rubrica);
        printf("%d",ris);
        stampaRubrica(rubrica);
        return 0;
    }


    FILE.C
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include "ex7-es7.h"
    #define N 4
    void inserimentoDati(Contatto *array){
        for(int i=0;i<N;i++){
            printf("inserisci il nome,cognome,data,numero dell'elemento in pos[%d]: ",i);
            scanf("%s%s%s%s",&array[i].nome,&array[i].cognome,&array[i].nascita,&array[i].numero);
        }
    }
    void stampaContatto(Contatto contat){
    printf("%s",contat.nome);
    printf("\n");
    }
    
    int inserisciContatto(Contatto rubrica[10]){
        if(N<10){
            printf("nome: ");
            scanf("%s",&rubrica[N].nome);
            printf("cognome: ");
            scanf("%s",&rubrica[N].cognome);
            printf("data: ");
            scanf("%s",&rubrica[N].nascita);
            printf("numero: ");
            scanf("%s",&rubrica[N].numero);
            return  1;
        }
        else{
            printf("errore rubrica piena\n");
            return 0;
        }
    }
    void stampaRubrica(Contatto elenco[10]){
        for(int h=0;h<N+1;h++){
        printf("%s %s %s %s\n",elenco[h].nome,elenco[h].cognome,elenco[h].nascita,elenco[h].numero);
        printf("\n");
        }
    }


    FILE.h

    codice:
    struct contatto{
        char* nome;
        char* cognome;
        char* nascita;
        char* numero;
    };
    typedef struct contatto Contatto;
        
     void inserimentoDati(Contatto *array);
     void stampaContatto(Contatto contat);
     int inserisciContatto(Contatto rubrica[10]);
     void stampaRubrica(Contatto elenco[10]);


    makefile

    codice:
    ex7-es7finale.o: ex7-es7.o ex7-es7main.o
        c99 -o ex7-es7finale ex7-es7.o ex7-es7main.o
        
    ex7-es7.o: ex7-es7.c
        c99 -c ex7-es7.c
        
    ex7-es7main.o: ex7-es7main.c
        c99 -c ex7-es7main.c

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Nella struttura compaiono semplici puntatori. Non puoi utilizzarli per l'input dati senza allocare la memoria.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Non capisco,cioè è da poco che creo tipi di strutture quindi sono un principiante però in questo esercizio non mi da errori e anche qui inserisco puntatori senza usare malloc e tutto gira normale!!

    Questo è un altro esercizio


    FILE.H



    codice:
    struct Studente{
        int matricola;
        char* nome;
        char* cognome;
        };
        typedef struct Studente studente;
    struct Esami{
        int matricola;
        char* nomemateria;
        int voto;
        };
        typedef struct Esami esami;
    void leggistud(int n, studente V[]);
    void leggiesami(int n, esami M[]);
    int somma(studente s, esami E[]);
    FILE.MAIN.C
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include "ex7-es6.h"
    #define N 4
    #define N1 4
    
    
    int main(){
        int tot=0;;
        studente identifica[N];
        esami sostenuti[N1];
        leggistud(N,identifica);
        leggiesami(N1,sostenuti);
        for(int i=0;i<N;i++){
            tot=somma(identifica[i],sostenuti);
            printf("il totale dei voti della matricola %d è :%d\n",identifica[i].matricola,tot);
        }
        return 0;
    }


    FILE.C
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include "ex7-es6.h"
    #define N 4
    #define N1 4
    void leggistud(int n, studente V[]){
        for(int i=0;i<n;i++){
            printf("inserisci la matricola il nome e il cognome dell'elemento in pos[%d]: ",i);
            scanf("%d%s%s",&V[i].matricola,&V[i].nome,&V[i].cognome);
        }
    }
    void leggiesami(int n, esami M[]){
        for(int j=0;j<n;j++){
            printf("inserisci la matricola il nome dell'esame e il voto dell'elemento in pos[%d]: ",j);
            scanf("%d%s%d",&M[j].matricola,&M[j].nomemateria,&M[j].voto);
        }
    }
    int somma(studente s, esami E[]){
        int ris=0;
        for(int k=0;k<N1;k++){
            if(s.matricola==E[k].matricola){
                ris+=E[k].voto;
            }
        }
        return ris;
    }

    MAKEFILE

    codice:
    ex7-es6finale: ex7-es6.o ex7-es6main.o
        c99 -o ex7-es6finale ex7-es6.o ex7-es6main.o
        
    ex7-es6.o: ex7-es6.c
        c99 -c ex7-es6.c
        
    ex7-es6main.o: ex7-es6main.c
        c99 -c ex7-es6main.c

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Che questo codice funzioni "apparentemente" non significa nulla. E' sbagliato anche questo, i puntatori sono usati in maniera sbagliata (è un errore grave).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Che questo codice funzioni "apparentemente" non significa nulla. E' sbagliato anche questo, i puntatori sono usati in maniera sbagliata (è un errore grave).

    Grazie mille oregon mi fido di te!!!! dovrò farti una statua!!!apportero le oppurtune modifiche

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 © 2026 vBulletin Solutions, Inc. All rights reserved.