Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.
Cuando una función MEX devuelve el control a, devuelve los resultados de sus cálculos en los argumentos de salida, la s contenida en los argumentos del lado izquierdo.MATLAB®mxArray
plhs[]
Estas matrices deben tener un ámbito temporal, por lo que no pase matrices creadas con la función en. destruye cualquier creado por la función MEX que no está en. también libera cualquier memoria que se asignó en la función MEX utilizando el,, o funciones.mexMakeArrayPersistent
plhs
MATLABmxArray
plhs
MATLABmxCalloc
mxMalloc
mxRealloc
recomienda que las funciones MEX destruyan sus propias matrices temporales y liberen su propia memoria asignada dinámicamente.MathWorks® Es más eficaz realizar esta limpieza en el archivo MEX de origen que depender del mecanismo automático. Sin embargo, hay varias circunstancias en las que la función MEX no alcanza su declaración de retorno normal.
No se alcanza el retorno normal si:
llamadas y la función que se llama crea un error.MATLABmexCallMATLAB
(Un archivo MEX fuente puede atrapar tales errores mediante el uso de la función, pero no todos los archivos MEX necesariamente necesitan interceptar errores.)mexCallMATLABWithTrap
El usuario interrumpe la ejecución de la función MEX utilizando.Ctrl + C
La función MEX se ejecuta de memoria. El controlador de fuera de memoria finaliza la función MEX.MATLAB
En el primer caso, un programador MEX puede garantizar la limpieza segura de las matrices temporales y la memoria antes de devolver, pero no en los dos últimos casos. El mecanismo de limpieza automática es necesario para evitar fugas de memoria en esos casos.
Debe usar las funciones proporcionadas, como y, para administrar la memoria.MATLABmxCalloc
mxFree
No utilice los homólogos de la biblioteca de C estándar; hacerlo puede producir resultados inesperados, incluida la terminación del programa.
Este ejemplo muestra cómo asignar memoria para las variables en una función MEX. Por ejemplo, si la primera entrada a la función () es una cadena, para manipular la cadena, cree un búfer de tamaño.prhs[0]
buf
buflen
Las siguientes sentencias declaran estas variables:
char *buf; int buflen;
El tamaño del búfer depende del número de dimensiones de la matriz de entrada y del tamaño de los datos de la matriz. Esta instrucción calcula el tamaño de:buflen
buflen = mxGetN(prhs[0])*sizeof(mxChar)+1;
A continuación, asigne memoria para:buf
buf = mxMalloc(buflen);
Al final del programa, si usted no vuelve como parámetro de salida, después libre su memoria como sigue:buf
plhs
mxFree(buf);
Antes de salir de la función MEX, destruya las matrices temporales y la memoria gratuita asignada dinámicamente, excepto si se devuelve dicho tipo en la lista de argumentos de salida, devuelta por, o utilizada para crear una estructura.mxArray
mexGetVariablePtr
Además, nunca elimine los argumentos de entrada.
Se utiliza para liberar memoria asignada por las funciones o, o.mxFree
mxCalloc
mxMalloc
mxRealloc
Se usa para liberar memoria asignada por las funciones.mxDestroyArray
mxCreate*