QGenericMatrix<3,151,double> matData;
Tu déclares et initialises ici ta matrice : Ok
1 2 3 4 5 6
| for (int i = 0 ; i < 151 ; i++)
{
matData.fill(mat[i][0]);
matData.fill(mat[i][1]);
matData.fill(mat[i][2]);
} |
Ici, tu utilises la function "fill" qui remplit toute la matrice avec une valeur. Donc appeler 3 fois cette fois ne sert à rien : ton premier et ton second remplissage seront "écrasé" par le troisième.
De plus, tu essaies de remplir avec une valeur provenant de ta variable "mat"... qui sera définit à la ligne suivante ! Donc ça risque de ne pas marcher.
double *mat = (double*)malloc(151*3*sizeof(double));
Ici, tu déclares ta variable "mat" (utilisée à la ligne précédante) et tu l'initialise en affectant un nouveau bloc mémoire créé avec malloc. Première remarque : tu oublies vite malloc ! C'est du C et pas du C++ et ce n'est pas très sur (surtout si tu ne maitrise pas : en l'occurrence, tu as une fuite mémoire ici). Deuxième remarque : tu créés "mat" pour récupérer tes données (càd pour lui donner l'adresse du premier élément de la matrice). Pourquoi lui affecter des données avant ?
Là, ça va. Mais...
Pourquoi veux tu accéder aux données de la matrice directement avec data() (avec les problèmes que cela comporte, en particulier la nécessité de jouer avec les pointeurs pour accéder aux données) ?
Tu peux utiliser directement les opérateurs () :
1 2
| matData(x,y) = 50.0;
cout << matData(x,y); |
EDIT : un peu de code pour montrer comment lire et écrire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream>
#include <QGenericMatrix>
int main(int argc, char *argv[])
{
QGenericMatrix<3,3,double> matData;
for(int i=0; i<3; ++i)
for(int j=0; j<3; ++j)
matData(i,j) = i+3*j;
for(int i=0; i<3; ++i)
{
for(int j=0; j<3; ++j)
std::cout << matData(i,j) << " ";
std::cout << std::endl;
}
} |
Partager