[matrice dinamica, errore segmentazione]

di il
5 risposte

[matrice dinamica, errore segmentazione]

Salve gente
preciso che sono un programmatore prettamente ad alto livello (Java). Per motivi didattici devo creare un piccolo programmino in c, utilizzando matrici dinamiche.
Tale programma per il momento, crea una matrice e ne calcola la trasposta, però quando vado ad eseguirlo sul terminale viene fuori il seguente errore
"Errore di segmentazione"

Purtroppo non riesco a capire dove sta questo problema, vi linko il codice.. Potete darmi una mano?! Grazie mille
#include <stdio.h>
#include <stdlib.h>

void trasposta(int **trasp, int **matrice, int righe, int colonne);

int main(void) {
	int righe, colonne, i, j;
	int **matrice;
	int **trasp;

	printf(" Righe........: ");
	scanf("%d", &righe);
	fflush(stdout);
	printf(" Colonne......: ");
	scanf("%d", &colonne);
	fflush(stdout);
	puts("");

	matrice = (int**) malloc((righe * sizeof(int*)));
	trasp = (int**) malloc((colonne * sizeof(int*)));
	for (i = 0; i < righe; i++) {
		matrice[i] = (int*) malloc(colonne * sizeof(int));
	}

	for (i = 0; i < colonne; i++) //poichè la matrice trasposta ha num righe e colonne invertire
			{
		matrice[i] = (int*) malloc(righe * sizeof(int));
	}

	for (i = 0; i < righe; ++i) {
		for (j = 0; j < colonne; ++j) {
			printf("Inserisci elemento riga %d e colonna %d: ", i, j);
			fflush(stdout);
			scanf("%d", &matrice[i][j]);
			puts("");
		}
	}

	trasposta(trasp,matrice,righe,colonne);

	for (i = 0; i < righe; ++i) {
		for (j = 0; j < colonne; ++j) {
			printf("matrice[%d][%d]= %d ", i, j, matrice[i][j]);
			fflush(stdout);
		}
		puts("");
	}

	for (i = 0; i < colonne; ++i) {
			for (j = 0; j < righe; ++j) {
				printf("matrice[%d][%d]= %d ", i, j, trasp[i][j]);
				fflush(stdout);
			}
			puts("");
		}

	return 0;
}

void trasposta(int **trasp, int **matrice, int righe, int colonne) {
	int i, j, tmp; /*Dichiaro la variabile temporanea per lo scambio*/
	for (i = 0; i < righe; i++) {
		for (j = 0; j < colonne; j++) {
			tmp = trasp[i][j];
			trasp[i][j] = matrice[j][i];
			matrice[j][i] = tmp;
		}
	}
}

5 Risposte

  • Re: [matrice dinamica, errore segmentazione]

    Quando hai l'errore?

    E' importante determinare la linea in cui avviene.

    Per il futuro, è importante saper individuare e correggere gli errori, più di saper scrivere codice.

    Puoi farlo con gli strumenti del tuo ambiente di programmazione (debugger) o semplicemente inserendo delle printf che indichino lo svolgersi del programma, con qualche aggiustamento individui facilmente la linea.

    P.S. Un suggerimento ... fai molta *attenzione* con i copia-incolla quando programmi perché sono fonte di errori ... ad esempio, nel tuo caso ...
  • Re: [matrice dinamica, errore segmentazione]

    oregon ha scritto:


    Quando hai l'errore?

    E' importante determinare la linea in cui avviene.

    Per il futuro, è importante saper individuare e correggere gli errori, più di saper scrivere codice.

    Puoi farlo con gli strumenti del tuo ambiente di programmazione (debugger) o semplicemente inserendo delle printf che indichino lo svolgersi del programma, con qualche aggiustamento individui facilmente la linea.

    P.S. Un suggerimento ... fai molta *attenzione* con i copia-incolla quando programmi perché sono fonte di errori ... ad esempio, nel tuo caso ...
    Purtroppo non riesco a capire quale è la linea in quanto programmo da terminale ubuntu, e mi dice soltanto Errore di segmentazione.
    Poichè ubuntu è installato su virtual box, non posso utilizzare nemmeno degli ide in quanto ho potuto assegnare veramente poca memoria.
    Ancora, per i copia-incolla, la parte che ho riutilizzato dal web è quella in cui leggo la matrice dinamicamente e, guarda caso, provando il codice, senza considerare la funzione trasposta, va tutto a meraviglia.
  • Re: [matrice dinamica, errore segmentazione]

    Ti ho detto che puoi usare delle printf per capire dove sta il problema.

    Comunque, perchè utilizzi due volte la malloc nel ciclo per matrice?
  • Re: [matrice dinamica, errore segmentazione]

    Vedo che il suggerimento ti è servito dato che hai corretto l'allocazione in

    http://forum.html.it/forum/showthread.php?threadid=2909991
  • Re: [matrice dinamica, errore segmentazione]

    La smettiamo col cross-posting per favore? Thread chiuso.
Devi accedere o registrarti per scrivere nel forum
5 risposte