Errore di segmentazione[C]

di il
8 risposte

Errore di segmentazione[C]

Ragazzi ho un problema col seguente programma. Ancora non ho implementato la funzione che richiede l'esercizio perchè la seguente parte di codice non mi compila e mi da errore di segmentzione, perchè??? mi potete aiutare e correggermi l'errore????
/*Scrivere una funzione in lingaggio C che mediante l'algoritmo del bubblesort
ordini la i-esima riga di una matrice di puntatori a variabili di tipo complesso.
La matrice, il numero di colonne e l'indice della riga dovrannno essere passate 
come argomento alla funzione. L'ordinamento dovrà essere fatto in base al modulo 
crescente dei valori.*/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 500

typedef struct complessi{
        double re;
        double im;
        }Complex;

void riempi(Complex *mat[MAX][MAX],int,int);
void stampa(Complex *mat[MAX][MAX],int,int);
void ordina(Complex *mat[MAX][MAX],int,int);

int main(){
    int i,j,n,m,p;
    Complex *mat[MAX][MAX];
    printf("Quante righe ha la matrice?\n");
    scanf("%d",&n);
    printf("Quante colonne ha la matrice?\n"); 
    scanf("%d",&m);
    riempi(mat,n,m);
    stampa(mat,n,m);
    system("pause");
    return 0;
    }
     
void riempi(Complex *mat[MAX][MAX],int n, int m){
     int i,j;
     srand(time(NULL));
     for(i=0;i<n;i++){
        for(j=0;j<m;j++){
           mat[i][j]->re = rand()%10+1;
           mat[i][j]->im = rand()%10+1;
           }}
           return;
           }                                       

void stampa(Complex *mat[MAX][MAX], int n, int m){
     int i,j;
     for(i=0;i<n;i++){
       for(j=0;j<m;j++){
          printf(" %lf + i%lf",(mat[i][j])->re, (mat[i][j])->im);
          }
          printf("\n");
          }
          return;
          }                             

8 Risposte

  • Re: Errore di segmentazione[C]

    Complex *mat[MAX][MAX];
    togli il puntatore.
    cambia le funzioni
    riempi(&mat,n,m);
    stampa(&mat,n,m);
  • Re: Errore di segmentazione[C]

    Fatto ma mi da ancora errore, stavolta nemmeno mi fa compilare:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #define MAX 500
    
    typedef struct complessi{
            double re;
            double im;
            }Complex;
    
    void riempi(Complex *mat[MAX][MAX],int,int);
    void stampa(Complex *mat[MAX][MAX],int,int);
    void ordina(Complex *mat[MAX][MAX],int,int);
    
    int main(){
        int i,j,n,m,p;
        Complex mat[MAX][MAX];
        printf("Quante righe ha la matrice?\n");
        scanf("%d",&n);
        printf("Quante colonne ha la matrice?\n"); 
        scanf("%d",&m);
        riempi(&mat,n,m);
        stampa(&mat,n,m);
        system("pause");
        return 0;
        }
         
    void riempi(Complex *mat[MAX][MAX],int n, int m){
         int i,j;
         srand(time(NULL));
         for(i=0;i<n;i++){
            for(j=0;j<m;j++){
               mat[i][j]->re = rand()%10+1;
               mat[i][j]->im = rand()%10+1;
               }}
               return;
               }                                       
    
    void stampa(Complex *mat[MAX][MAX], int n, int m){
         int i,j;
         for(i=0;i<n;i++){
           for(j=0;j<m;j++){
              printf(" %lf + i%lf",(mat[i][j])->re, (mat[i][j])->im);
              }
              printf("\n");
              }
              return;
              }                             
    
  • Re: Errore di segmentazione[C]

    Non c'è nessuno che mi possa aiutare???
  • Re: Errore di segmentazione[C]

    Ma vuoi una matrice di puntatori a Complex o una matrice di Complex? Perché non basta cambiare i prototipi delle funzioni per avere qualcosa di sensato.
  • Re: Errore di segmentazione[C]

    Una matrice di puntatori a complex, che devo fare????....questo programma mi sta facendo impazzire....
  • Re: Errore di segmentazione[C]

    Sempre e comunque sarà un puntatore di array di struct.
    
    #include <stdio.h>
    #define MAX 10
    
    typedef struct _foo
    {
      int bar;
    } foo;
    
    void dummy(foo x[][MAX], int n, int m)
    {
      x[n][m].bar=1;
    }
    int main ()
    {
      foo x[MAX][MAX];
    
      dummy (x,0,1);
      
      return 0;
    }
    
  • Re: Errore di segmentazione[C]

    Oppure
    
    #include <stdio.h>
    #define MAX 10
    
    typedef struct _foo
    {
      int bar;
    } foo;
    
    void dummy(foo (*x)[][MAX], int n, int m)
    {
      x[n][m]->bar=1;
    }
    int main ()
    {
      foo x[MAX][MAX];
    
      dummy (&x,0,1);
     
      return 0;
    }
    
    le vie del signore sono infinite
    p.s.: scusa Max se ho usato il tuo codice.
  • Re: Errore di segmentazione[C]

    scusa Max se ho usato il tuo codice
    no problem
Devi accedere o registrarti per scrivere nel forum
8 risposte