Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    C++ problema con le classi

    Buona sera a tutti.

    Sto cercando di scrivere una classe 'matrix' che mi permetta di implementare operazioni con le matrici.

    la classe ha 3 attributi:

    due interi N,M, indicanti le dimensioni della matrice
    un puntatore a float x, contenente i valori della matrice

    Mi sono bloccato sul metodo 'fromfile', il quale dovrebbe:

    1. leggere N ed M dal file specificato
    2. allocare memoria necessaria
    3. leggere i valori di x dal file.

    Il codice viene compilato correttamente, ma quando lo eseguo si impalla e windows lo termina (ho windows 7, fa differenza?)

    Credo che l'impallamento avvenga quando la funzione malloc viene chiamata (come si evince facendo stampare i valori di M ed N prima o dopo malloc), ma non capisco perche'. Mi sembra corretta.

    La cosa strana e' che se il codice di 'fromfile' viene inserito pari pari nel main (aggiungendo le necessarie dichiarazioni di variabili), funziona perfettamente.


    riporto il codice di seguito.

    codice:
    #include "stdio.h"
    #include <iostream>
    
    class matrix
    {
    	public:
    	int M,N;	//number of rows and columns respectively
    	float* x;	//content of the matrix
    	void fromfile(char* name);	//loads a matrix from a file
    };
    
    void matrix::fromfile(char* name)
    {
    	FILE* fid;
    	fid = fopen(name, "r");
    	fscanf(fid, "%d\n", &M);	//Acquires number of rows
    	fscanf(fid, "%d\n", &N);	//Acquires number of clumns
    
    	//printf("%d\n", M);
    	//printf("%d\n", N);
    
    	x = (float *) malloc(N*M*sizeof(float));
    
    	for (int i=0; i<M; i++)
    	{
    		for (int k=0; k<N; k++)
    		{
    			fscanf(fid, "%f\n", x[i+M*k]);
    			printf("%d\n", i+M*k);
    		}
    	}
    	fclose(fid);
    }
    
    
    int main()
    {
    	matrix m1;
    	m1.fromfile("matrix1.dat");
    
    	return 0;
    }
    Questo e' il file 'matrix1.dat':

    codice:
    2
    3
    10.01
    20.02
    30.03
    40.04
    50.05
    60.06


    Grazie mille per l'aiuto,
    Panecasareccio.

  2. #2
    Hai provato a fare un po di debug?

    P.S. se per caso non la "fopen()" non ti apre il file...che succede?!
    Administrator of NAMDesign.Net

  3. #3
    Originariamente inviato da LeaderGL
    Hai provato a fare un po di debug?

    P.S. se per caso non la "fopen()" non ti apre il file...che succede?!
    Salve, prima di tutto grazie per la risposta.

    Circa fopen, sono sicuro che il file venga aperto, perche' mi stampa i valori di M ed N correttamente.

    Quanto al debug... hai perfettamente ragione... ma non uccidermi se ti dico che non so come si fa!

    io uso il borland c++ 5.5 come compilatore, e editplus come editor. Non ho trovato tra i menu una voce 'debug'. Se mi dici come si fa il debug, te ne sarei grato...


    Un saluto, Panecasareccio.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Con un po' di attenzione saresti arrivato da solo a capire che questa

    codice:
    fscanf(fid, "%f\n", x[i+M*k]);
    deve essere

    codice:
    fscanf(fid, "%f\n", &x[i+M*k]);
    e sarebbe anche meglio che fosse

    codice:
    fscanf(fid, "%f\n", &x[i*N+k]);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ciao Oregon!

    Ti ringrazio!
    Adesso funziona!
    Ho ancora bisogno di fare molta molta pratica!

    Per caso si puo' settare il compiatore in maniera tale da lanciarmi dei messaggi di errore/warning per questo tipo di errorini?


    Panecasareccio

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dipende dal compilatore ma a volte (come in questa) non è proprio possibile ...

    E' necessaria un po' di attenzione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.