• Lunes 23 de Diciembre de 2024, 03:50

Autor Tema:  mxFree  (Leído 1011 veces)

RossaRamos

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
mxFree
« en: Jueves 23 de Abril de 2009, 03:32 »
0
Hola a todos,

estoy realizando una interfaz entre MATLAB y C y tengo un problema con mxFree, espero que podais ayudarme, porque esto de hacer una interfaz sola sin ayuda es un rollo, cuando ademas en los foros casi nadie contesta a estas preguntas, a parte de no saber nunca donde escrbirlas, si en el de Matlab o en el de C.

Bueno os pongo la parte del codigo que me da error:

Código: C++
  1. [code=matlab]void mexFunction(int nlhs,mxArray**plhs,int nrhs,mxArray **prhs)
  2. {
  3.     mxArray *param_in[5];
  4.     void *new_pr=NULL;
  5.     double TerrStation[3]={0,0,0};
  6.     struct *Earth_station station;
  7.    
  8.     d2r=3.14/180;
  9.     station->h=0;
  10.     station->lat=72.03;
  11.     station->lon=23.43;
  12.    
  13.     //bueno tendria que incluir como calculo los parametros rc y e_sq, pero vienen de un cuadro de dialogo, mas sucesivas operaciones, y realmente lo que me interesa no es eso
  14.  
  15.     TerrStation[0] = (rc+station->h)*cos(station->lat*d2r)*cos(station->lon*d2r);
  16.     TerrStation[1] = (rc+station->h)*cos(station->lat*d2r)*sin(station->lon*d2r);
  17.     TerrStation[2] = (rc*(1-e_sq)+station->h)*sin(station->lat*d2r);//*ones(size(Y));  
  18.     param_in[0]=mxCreateDoubleMatrix(3,1,mxREAL);
  19.    if(param_in[0]!=NULL)
  20.    {
  21.         new_pr=mxCalloc(3,sizeof(double));
  22.         if(new_pr!=NULL)
  23.         {
  24.     new_pr=TerrStation;
  25.     mxSetData(param_in[0],new_pr);
  26.                 mexCallMATLAB(0,NULL,1,param_in,"plotterrstation");
  27.         }
  28.         mxFree(new_pr);              //AQUI ME DA UN EXCEPCION DESCONOCIDA; Y LA VERDAD ES QUE NO SE PORQUE OCURRE ESTO CADA VEZ QUE LLAMO A MXFREE. NECESITO RESERVAR MEMORIA Y DESPUES LIBERARLA PORQUE SE TRATA DE UN PROGRAMA BASTANTE GRANDE
  29.    }
  30.  return;
  31. }
[/code]


SABEIS A QUE SE DEBE ESTE ERROR?

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: mxFree
« Respuesta #1 en: Viernes 24 de Abril de 2009, 21:36 »
0
¿El error aparece siempre, tanto cuando new_pr es NULL como cuando tiene asignado algún valor? ¿Realmente debes usar mxFree, no basta con usar TerrStation?

¿No puedes usar mxSetPr en lugar de SetData? En la ayuda se menciona esto:
Citar
mxSetData is similar to mxSetPr, except that in C, its second argument is a void *. Use this on numeric arrays with contents other than double.
La imaginación es el límite.
Hardware & Software | Mexchip