Supporto esercizio. Errore di Segmentazione

di il
5 risposte

Supporto esercizio. Errore di Segmentazione

Salve a tutti, sono nuovo del forum! MI farebbe molto piacere se potessi avere supporto riguardo un esercizio; in sostanza devo tirare fuori una matrice attraverso un puntatore di puntatore. Questo è il codice

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

void crea_matrice(int ** matrice, unsigned n, unsigned m) {
  int i, j;
  matrice=malloc(n*sizeof(int *));
  for (i=0; i<n; i++){
     matrice[i]=malloc(m*sizeof(int));
   } 

  for (i=0; i<n; i++) {
    for (j=0; j<m; j++) {
      matrice[i][j]=0;
    }
  }
}

int main (void) {
  int ** matrice;
  int n=5,m=5;
  crea_matrice(matrice,n,m);
  printf("%d", matrice[0][0]);
  return 0;
}
In sostanza quando cerco di stampare nel main il valore [0,0] mi restituisce un errore di segmentazione, mentre se cerco di stamparlo all'interno della funzione va tutto liscio. In sostanza sembra che non venga "passato" il risultato dalla funzione alla matrice! Una mano? (il testo dice che non posso usare una funzione diversa dal void)

5 Risposte

  • Re: Supporto esercizio. Errore di Segmentazione

    Devi usare un triplo puntatore nella funzione
    
    void crea_matrice(int *** matrice, unsigned n, unsigned m) {
    	int i, j;
    	*matrice = (int **)malloc(n * sizeof(int *));
    	for (i = 0; i<n; i++) {
    		(*matrice)[i] = (int *)malloc(m * sizeof(int));
    	}
    
    	for (i = 0; i<n; i++) {
    		for (j = 0; j<m; j++) {
    			(*matrice)[i][j] = 0;
    		}
    	}
    }
    
    e quindi nel main passare il doppio puntatore per indirizzo
    crea_matrice(&matrice, n, m);
  • Re: Supporto esercizio. Errore di Segmentazione

    Caspita gli hai dato la risposta!

    ti consiglio, al fine di imparare, di fare "nel vecchio modo" (cioè non disponendo di un debugger)
    stampa il valore della variabile PRIMA di chiamare la funzione
    chiama la funzione; fagli stampare il valore che "dovrebbe" essere scritta nella variabile
    stampa il valore della variabile DOPO aver chiamato la funzione
  • Re: Supporto esercizio. Errore di Segmentazione

    +m2+ ha scritto:


    Caspita gli hai dato la risposta!
    Tutto sommato era la migliore strada. O impara dall'esempio ...
  • Re: Supporto esercizio. Errore di Segmentazione

    In sostanza usavo un puntatore che era una copia di quello che mi interessava, quindi basta prendere il puntatore del puntatore del puntatore per poter usare ottimamente il puntatore del puntatore che mi serviva. Grazie mille, in effetti era un errore abbastanza banale!
  • Re: Supporto esercizio. Errore di Segmentazione

    Sarà un errore banale ma in un compito per il prof significa che tu hai forti carenze nell'uso dei puntatori e dei passaggi degli argomenti a funzione.
Devi accedere o registrarti per scrivere nel forum
5 risposte