Matrice

di il
6 risposte

Matrice

Salve, ho realizzato questa matrice con i puntatori, perchè il compilatore mi da un segmentation fault?

#include <stdlib.h>
#include <stdio.h>
#define DIM 10

int main(void){
	int cella;
	int *ptr = &cella;
	int **mptr = &ptr;
	int i; //i-esimo elemento di colonne
	int j; // j-esimo elemento di righe

	//creazione matrice 10x10
	j = 0;
	while(j < DIM-1){
		i = 0;
		while(i < DIM-1){
			*(*(mptr+i)+j) = 1;
			i = i + 1;
		}
		j = j + 1;
	}
	//stampa matrice
	j = 0;
	while(j < DIM-1){
		i = 0;
		while(i < DIM-1){
			printf("%d\t",*(*(mptr+i)+j));
			i = i + 1;
		}
		printf("\n");
		j = j + 1;
	}

    system("pause");
    return 0;
}

6 Risposte

  • Re: Matrice

    Premesso che le varie condizioni dovrebbero essere <DIM e non <DIM-1, e che utilizzando i for il programma potrebbe essere notevolmente semplificato, il vero problema è che la matrice non viene mai allocata...
  • Re: Matrice

    Così facendo non sto inizializzando il doppio puntatore al primo elemento della riga e primo elemento della colonna della matrice ?
    
    int cella;
    int *ptr = &cella;
    int **mptr = &ptr;
    
  • Re: Matrice

    Ho provato a cambiare il codice in questo modo ma non ho risolto.
    #include <stdlib.h>
    #include <stdio.h>
    #define DIM 10
    
    int main(void){
    
    	int **mptr = (int**) malloc (10 * sizeof(int));
    	int i; //i-esimo elemento di colonne
    	int j; // j-esimo elemento di righe
    
    	//creazione matrice 10x10
    	j = 0;
    	while(j < DIM){
    		i = 0;
    		while(i < DIM){
    			*(*(mptr+i)+j) = 1;
    			i = i + 1;
    		}
    		j = j + 1;
    	}
    	//stampa matrice
    	j = 0;
    	while(j < DIM){
    		i = 0;
    		while(i < DIM){
    			printf("%d\t",*(*(mptr+i)+j));
    			i = i + 1;
    		}
    		printf("\n");
    		j = j + 1;
    	}
    
        system("pause");
        return 0;
    }
  • Re: Matrice

    Una matrice allocata dinamicamente è costituita da un array di array, bisogna quindi allocare un array di RIG puntatori ad int e per ognuno di essi un array di COL int (nel caso specifico RIG=COL=DIM).
  • Re: Matrice

    Quindi devo fare 10 malloc per le colonne?
  • Re: Matrice

    Esatto!
Devi accedere o registrarti per scrivere nel forum
6 risposte