MATLAB Answers

0

Error when calling the mexFunction

Asked by shdotcom shdotcom on 20 Sep 2019 at 15:12
Latest activity Commented on by shdotcom shdotcom on 21 Sep 2019 at 4:12
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 Comments

Sign in to comment.

Products


Release

R2018b

1 Answer

Answer by James Tursa
on 20 Sep 2019 at 17:36
 Accepted Answer

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 >=

  1 Comment

Thank you very much for your help. Is there anything that I can do to improve the mexFunction. I have used the code in this post. However, This code is too old.

Sign in to comment.