Error when calling the mexFunction
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
shdotcom shdotcom
am 20 Sep. 2019
Kommentiert: shdotcom shdotcom
am 21 Sep. 2019
I have build the mexFunction for this source code. However, I have got this error when I call the main function
argc 3
argv --tfError using callFun
main function causes an error
#include <mex.h>
#include <matrix.h>
#include<stdio.h>
#include <math.h>
#include <limits.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include "ants.h"
#include "utilities.h"
#include "InOut.h"
#include "TSP.h"
#include "timer.h"
#include "ls.h"
// ========================================================================
/* --- main program ------------------------------------------------------ */
// ========================================================================
int callFun(int argc, char *argv[]){
printf ( "\nargc %d",argc);
printf ( "\nargv %s",argv[1]);
long int i;
start_timers();
}
// ========================================================================
/* --- mex function----------------------------------------------------- */
// ========================================================================
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int argc = 0;
char **argv;
int i, result;
argc = nrhs;
argv = (char **) mxCalloc( argc, sizeof(char *) );
for (i = 0; i < nrhs; i++){
if( !mxIsChar( prhs[i] ) ){
mexErrMsgTxt("Input must be of type char.");
return;
}
argv[i] = mxArrayToString( prhs[i] );
}
result = callFun( argc, argv );
for( i=argc-1; i<=0; i-- )
mxFree( argv[i] );
mxFree( argv );
if( result )
mexErrMsgTxt("main function causes an error");
}
Call the function:
callFun('callFun','--tf', 'tsp',
the problem is in this line:
printf ( "\nargv %s",argv[1]);
, but, I could not understand why?
0 Kommentare
Akzeptierte Antwort
James Tursa
am 20 Sep. 2019
You probably should have gotten a warning from the compiler that your callFun( ) function doesn't return anything, even though the signature says it does. When you get funny behavior like this, it is best to use the -v option in your mex command and look at all of the compiler and linker messages since they might tell you exactly what is wrong. You should add something like this to the bottom of the callFun( ) function:
return 0; // <-- or whatever value is appropriate
The way it is coded now, your mexFunction is picking off a garbage value from a register and treating it as the function return value.
Also, this line
for( i=argc-1; i<=0; i-- )
should be this instead
for( i=argc-1; i>=0; i-- ) // changed <= to >=
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Write C Functions Callable from MATLAB (MEX Files) finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!