Error when calling the mexFunction
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
James Tursa
2019-9-20
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 >=
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!