Bonjour à toutes et à tous,
Je suis en train de me mettre aux fichiers MEX pour transformer mes fonctions matlab en fonction C pour gagner de la vitesse.
Ca fait un bail que j'ai fait du C/C++ et j'avoue que je redécouvre ce langage.
J'ai écrit un petit programme pour essayer de faire fonctionner simplement les mécanismes du MEX, et il marche... une fois? il fait bien un carré, mais si je l'appelle 2 fois matlab crash (veuillez redémarrer matlab etc...).
J'ai donc du me planter quelque part dans la création d'espace mémoire, mais je ne sais pas trop ou je faute, pouvez vous m'aider?
Voici le code:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include "mex.h" void mexFunction(int nout, mxArray *pout[], int nin, const mxArray *pin[] ) { double *x; double *y; *x = mxGetScalar(pin[0]); /* Preparation de la sortie de la fonction */ pout[0] = mxCreateDoubleMatrix(1,1,mxREAL); y = mxGetPr(pout[0]); /* Calcul */ y[0] = x[0] * x[0]; /* Sortie de la fonction */ mxSetPr(pout[0],y); }
Je pense que l'erreur est dans la ligne: pout[0] = mxCreateDoubleMatrix(1,1,mxREAL); ne devrais-je pas utiliser un type mxDOUBLE?
Et si j'ai bien compris x et y sont des pointeurs vers des tableaux, ce qui sous entend que je peux les modifier directement en utilisant une fonction de type (calc(x,y))?
Merci par avance pour les informations que vous pourrez me communiquer...
Gian
Partager