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.