Errore di Bus in programma C

mandiatutti

Nuovo Utente
5
0
Ciao ragazzi, vi riporto un programma che ho fatto come esercizio in vista di un esaame preso da qua: (numero 2)
http://web.diegm.uniud.it/pierluca/public_html/teaching/fpac/prove_scritte/fp_150618.pdf
Questo è il codice che ho scritto, ma mi ritorna errore di segmentazione core dumped....
Qualcuno è così gentile da spiegarmi dove sbaglio per favore? Grazie! :)
#include <stdio.h>
#include <stdlib.h>


#define N 6


void ricerca_e_stampa_elementi(double **mat, int ncol, int nrig, double elementi[]);
void inizializza_matrice(double **matri, char rig[] , int righe, int colonne);




int main(int argc, char *argv[])
{
int l;
int nrighe;
int ncolonne;
double elementi[N];
char riga[21];
double *matrix[nrighe][ncolonne];
FILE *fin1;
FILE *fin2;

if(argc!=2)
{
printf("numero argomenti insufficiente");
exit (EXIT_FAILURE);
}

if((fin1=fopen(argv[1], "r"))==NULL)
{
printf("errore apertura primo file");
exit (EXIT_FAILURE);
}

fscanf(fin1, "%d %d", &nrighe, &ncolonne);

/*ho allocato lo spazio per la matrice ora la devo inizizializzare*/
while(l<=nrighe)
{
while(fgets(riga, 21, fin1)!=NULL)
{
inizializza_matrice(*matrix, riga, l, ncolonne);
}

l++;
}


/*a questo punto ho inizializzato la matrice, devo mettere gli elemnti da ricercare in un vettore e chiamare una funzione che ricerchi gli elementi del vettore nella matrice*/

if((fin2=fopen(argv[2], "r"))==NULL)
{
printf("errore apertura secondo file");
exit (EXIT_FAILURE);
}
/*il file che contiene gli elementi da ricercare ha 7 elementi per riga*/
while(fscanf(fin2, "%lf %lf %lf %lf %lf %lf %lf", &elementi[0],&elementi[1], &elementi[2], &elementi[3], &elementi[4], &elementi[5], &elementi[6])!=EOF)
{
ricerca_e_stampa_elementi(*matrix, ncolonne, nrighe, elementi);
}
return (EXIT_SUCCESS);
}




void inizializza_matrice(double **matri, char rig[] , int righe, int colonne)
{

int j;
j=0;

while(j<=colonne)
{
matri[righe][j]=(atof(&rig[j]));
j++;
}
return;
}


void ricerca_e_stampa_elementi(double **mat, int ncol, int nrig, double elementi[])
{

int c, r, k;
c=r=k=0;

while(k<=N)
{
printf("%f: ", elementi[k]);

while(r<=nrig)
{
while(c<=ncol)
{

if(mat[r][c]==(elementi[k]))
{
printf("{%d,%d}", r, c);
}
c++;
}
c=0;
r++;
}
k++;
}
return;
}

Ps. Sono consapevole che la formattazione di quello che stampa è probabilmente sbagliata, ma l'avrei aggiustata una volta che il programma funziona...
 
Ultima modifica:

Giacky91

Utente Attivo
793
84
CPU
Intel Core I7 - 2630QM - 2.0 GHZ
Scheda Madre
Proprietaria
HDD
500GB WD 2.5"
RAM
2 x 2GB Corsair
GPU
GeForce GT540M 1GB
Audio
Integrato
OS
Windows 10 Pro, Kali Linux 2.0
Ciao ragazzi, vi riporto un programma che ho fatto come esercizio in vista di un esaame preso da qua: (numero 2)
http://web.diegm.uniud.it/pierluca/public_html/teaching/fpac/prove_scritte/fp_150618.pdf
Questo è il codice che ho scritto, ma mi ritorna errore di segmentazione core dumped....
Qualcuno è così gentile da spiegarmi dove sbaglio per favore? Grazie! :)

Ps. Sono consapevole che la formattazione di quello che stampa è probabilmente sbagliata, ma l'avrei aggiustata una volta che il programma funziona...

dovrebbe essere un errore relativo all'apertura dei file. prova a fare
Codice:
fin1 = fopen(argv[1], "r")
if( fin1 == NULL){
     //ERRORE
}
e poi anche per il secondo file
Codice:
fin2 = fopen(argv[2], "r")
if( fin2 == NULL){
     //ERRORE
}

una considerazione: argc contiene il numero dei parametri che passi al main. Esso contiene il nome del programma e a seguire i vari parametri. Quindi argc sarà sempre >= 1. Se vuoi verificare che vengono passati i nomi dei file, non devi verificare che argc sia = 3?

se dovesse ripresentarsi l'errore, prova a scrivere il percorso del file nella fopen, invece di mettere argv[].

se puoi, posta l'errore come ti si presenta!
 
Ultima modifica:

mandiatutti

Nuovo Utente
5
0
dovrebbe essere un errore relativo all'apertura dei file. prova a fare
Codice:
fin1 = fopen(argv[1], "r")
if( fin1 == NULL){
     //ERRORE
}
e poi anche per il secondo file
Codice:
fin2 = fopen(argv[2], "r")
if( fin2 == NULL){
     //ERRORE
}

una considerazione: argc contiene il numero dei parametri che passi al main. Esso contiene il nome del programma e a seguire i vari parametri. Quindi argc sarà sempre >= 1. Se vuoi verificare che vengono passati i nomi dei file, non devi verificare che argc sia = 3?

se dovesse ripresentarsi l'errore, prova a scrivere il percorso del file nella fopen, invece di mettere argv[].

se puoi, posta l'errore come ti si presenta!
Non penso sia quello il problema, bensì come gli passo le matrici alla funzione...
Solo che non saprei come fare altrimenti...
 

Giacky91

Utente Attivo
793
84
CPU
Intel Core I7 - 2630QM - 2.0 GHZ
Scheda Madre
Proprietaria
HDD
500GB WD 2.5"
RAM
2 x 2GB Corsair
GPU
GeForce GT540M 1GB
Audio
Integrato
OS
Windows 10 Pro, Kali Linux 2.0
Non penso sia quello il problema, bensì come gli passo le matrici alla funzione...
Solo che non saprei come fare altrimenti...

il passaggio di matrice è giusto, si effettua con doppi puntatori.
pero ho notato una cosa, nel codice hai scritto che
Codice:
 /*il file che contiene gli elementi da ricercare ha 7 elementi per riga*/
ma questo particolare non c'è nella traccia.

prova a fare le modifiche che ti ho proposto, non ti costa nulla!
 

mandiatutti

Nuovo Utente
5
0
ok! questa sera provo che al momento non ho il pc... no, è vero non è scritto nella traccia, ma ho scritto il programma basandomi su quel determinato file... CApisco che così perde di universalità, ma avrei aggiustato in seguito... intanto vorrei farlo girare... Grazie mille comunque, dopo aver modificato riporto cosa mi dice il terminale... :)
 

mandiatutti

Nuovo Utente
5
0
Ho provato, ma non era un errore relativo all'apertura del file... anche perchè il altri programmi l'ho sempre fatto così ed ha sempre funzionato... Not a clue...:(
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili