Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [C/C++] Programma va in crash

    Salve a tutti, sto sviluppando un programma che mi permetta di salvare su un file di testo una matrice bidimensionale. L'esercizio richiedeva l'implementazione di due matrici, la cui somma doveva essere salvata in una terza matrice, da salvare quindi su file di testo in output.
    Il programma compila correttamente ma al momento di salvare la matrice finale, va in crash.
    Riporto le linee che riguardano il salvataggio in output.
    Grazie in anticipo

    codice:
     void salva_file (int riga, int col){    
        int i,j;
        FILE *fp_in, *fp_out;
        float mat_somma[MAX_DIM][MAX_DIM];          
    // apertura file di output 
      fp_out=fopen("Esercitazione 2.txt","w");
      // scrittura su file di output 
      for (i=0;i<riga;i++){
          for (j=0;j<col;j++){
        fprintf(fp_out,"%f ",mat_somma[i][j]);
      // chiusura file di output 
      fclose(fp_out);
          }
      }
    }
    poi, richiamo la funzione nel main

    codice:
        
    printf("\nSalvo la matrice in output ");
    salva_file (riga, col);
    Ultima modifica di Nicepose; 25-11-2014 a 17:03

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    1) la matrice è locale alla funzione ... i suoi valori sono casuali ... perché li salvi ?

    2) quanto vale MAX_DIM ?

    3) quanto valgono riga e col ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    1) la matrice è locale alla funzione ... i suoi valori sono casuali ... perché li salvi ?

    2) quanto vale MAX_DIM ?

    3) quanto valgono riga e col ?
    Per quanto riguarda riga e col, inserisco io valori in input in un'altra funzione così da poter definire e scrivere i valori della matrice, MAX_DIM vale 10 (definito col
    codice:
    #define
    , così da poter definire una funzione di grandezza massima 10x10.

    Riguardo al punto 1 non ho capito

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intendo dire, come inserisci i valori nella matrice?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Tramite tastiera, qui posto le linee di codice (leggo due matrici da input e salvo la matrice somma in una terza)

    codice:
    typedef float vettore[MAX_DIM];typedef vettore matrice[MAX_DIM];   // matrice con 10x10 celle, ognuna delle quali puo’ contenere 1 int
    
    
    void leggimatrici(matrice mat1, matrice mat2, int *riga, int *col){
      float z;
      printf("\nDammi il numero di righe: ");
      scanf("%d",riga);
      printf("\nDammi il numero di colonne: ");
      scanf("%d",col);
      printf("\nCompila la matrice numero 1:\n");
      for (int i=0;i<*riga;i++)
        for (int j=0;j<*col;j++){
          printf("Matrice 1: inserisci l'elemento [%d][%d]: ", i, j);
          scanf("%f", &z);
          mat1[i][j]=z;
          }
    
    
     
      printf("\nCompila la matrice numero 2\n");
      for (int i=0;i<*riga;i++)
        for (int j=0;j<*col;j++){
          printf("Matrice 2: inserisci l'elemento [%d][%d]: ", i, j);
          scanf("%f", &z);
          mat2[i][j]=z;
          }
    
    
    }
    ...

    codice:
    void somma (matrice mat1, matrice mat2, int riga, int col){  
    //	matrice mat1;
    //	matrice mat2;
    	int i=0;
    	int j=0;
    	float mat_somma[MAX_DIM][MAX_DIM];
    
    
    	printf("\nMatrice somma: \n");
    for(i=0; i<= 1; i++) 
                for(j=0; j<= 1; j++) 
                  mat_somma[i][j] = mat1[i][j] + mat2[i][j]; 
              /*stampa il risultato*/ 
              for(i=0; i<= 1; i++) 
              { 
                for(j=0; j<= 1; j++) 
                   printf("%f ",mat_somma[i][j]); 
                printf("\n"); 
              }
    
    
    }

  6. #6
    Non conosco C\C++, ma in generale scrivendo
    codice:
    float mat_somma[MAX_DIM][MAX_DIM]
    Non stai definendo una variabile locale che è un array di tipi float vuoto, probabilmente esistente solo nella funzione?
    Inoltre se così fosse, provando a cancellare l'inizializzazione, avresti comunque un'errore per lo stesso discorso se però vale quanto detto sopra. Infatti, inizializzi la matrice mat_somma nella funzione somma, e se quanto detto è vero, allora questo array esiste solo nella funzione.
    Praticamente l'array mat_somma, nel caso cancelli la definizione in salva_file, allora ti da errore perché non esiste, se non lo cancelli ti da errore perché potrebbe essere vuoto e per questo motivo potrebbe darti l'errore.

    Io conosco il Java, però so che in sostanza queste cose sono molto simili se non addirittura uguali.
    Ultima modifica di CaMpIoN; 25-11-2014 a 22:43
    Forza Napoli!

  7. #7
    Quote Originariamente inviata da CaMpIoN Visualizza il messaggio
    Non conosco C\C++, ma in generale scrivendo
    codice:
    float mat_somma[MAX_DIM][MAX_DIM]
    Non stai inizializzando una variabile locale (probabilmente esistente solo nella funzione) che è una matrice di tipi float vuota?
    Sì, però in seguito tramite cicli for la "trasformo" nella matrice che è la somma delle due precedenti

  8. #8
    Con i cicli for, tu riempi la matrice definita localmente nella funzione somma, oltre il blocco della funzione l'array non può essere utilizzato, perché è come se non esistesse più.
    Ad esempio, il garbage collector di Java cancellerebbe dalla memoria quell'array appena uscito dal blocco.
    Forza Napoli!

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La matrice somma è locale alla funzione somma. All'esterno di questa non esiste.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Per farla breve, con C++ dovresti definire l'array una sola volta in modo globale, in questo modo dovrebbe essere possibile l'accesso dalla funzione salva_file e somma in cui devi solo indirizzarti all'array, togli le definizioni dell'array dalle funzioni.
    Forza Napoli!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.