MATLAB crashes when I run MEX file - HELP

11 views (last 30 days)
SangWook
SangWook on 6 Mar 2014
Commented: James Tursa on 7 Mar 2014
Hello. I am trying to write a mex file through MATLAB. This is my first time to deal with C code in general although I have a coding experience in Java. After some research and the test code that I wrote in MATLAB, I successfully implemented mex file and ran fine. After that I tried to add some more code in existing code, MATLAB crashes up every time I ran it. I know that there is not many problems, but I quite don't know how to fix this error.
Here is a code that I wrote. I know that this code is very clumsy and it's because it's my first time to code c. The issue that I have with is almost the last line of the code; for loop.
#include stdio.h
#include stdlib.h
#include math.h
#include "mex.h"
#include "matrix.h"
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
double *temp, *proj, *proj_spt, *feature, *stim, *spt;
int i, ii, Nstim, Mstim, Nfeat, Mfeat, Mspt, Nspt;
Mstim = mxGetM(prhs[0]); /* Get a dimension of stim */
Nstim = mxGetN(prhs[0]);
Mspt = mxGetM(prhs[2]); /* Get a dimension of spt */
Nspt = mxGetN(prhs[2]);
Mfeat = mxGetM(prhs[1]);
Nfeat = mxGetN(prhs[1]);
plhs[0] = mxCreateDoubleMatrix(Mstim, Nstim, mxREAL);
proj = mxGetPr(plhs[0]);
plhs[1] = mxCreateDoubleMatrix(Mstim, Nstim, mxREAL);
proj_spt = mxGetPr(plhs[1]);
feature = mxGetPr(prhs[1]);
stim = mxGetPr(prhs[0]);
spt = mxGetPr(prhs[2]);
for (i=0;i<(Nstim-Nfeat+1);i++){
temp[i] = 0;
for (ii = 0; ii < Nfeat; ii++){
temp[i] = temp[i] + (feature[ii]*stim[i+ii]);
}
}
for (i=(Nstim-Nfeat+1);i<Nstim;i++){
temp[i] = 0;
for (ii = 0; ii < (Nstim-i); ii++){
temp[i] = temp[i] + (feature[ii]*stim[i+ii]);
}
}
for (i=0;i<Nstim;i++){
proj[i] = temp[i];
}
// This part has an error.
for (i=0;i<Nspt;i++){
ii = spt[i];
mexPrintf("%d is spike time. \n",ii);
}
As you can see, I have tried somethings and really don't want to try more because every time I run this, MATLAB crashes, which is very annoying. The fact that I don't know how to debug the mex file also is being a reason for me not to try.
Could anyone help me out to get through this error? Also I notice that it is not possible for the one to use Mstim (in this case) as an index of the vector or array..Why is it not possible?
For example, I noticed that I get an error if I do this.
for (i = Nfeat ; i < Nstim , i++){
proj[i] = temp[i-Nfeat];
}
Why does this cast an error? FYI, Nstim = 15 and Nfeat = 4 , which is supposed to be length(stim) = 15 and length(feat) = 4 in MATLAB.

Answers (1)

James Tursa
James Tursa on 7 Mar 2014
I don't see any place in your code where you allocate temp. So the first time you use it you dereference an invalid pointer, and MATLAB crashes. Try adding this before using temp:
temp = mxMalloc(Nstim * sizeof(*temp));
And then at the end of your code:
mxFree(temp);
  1 Comment
James Tursa
James Tursa on 7 Mar 2014
P.S. You don't need to explicitly #include "matrix.h" since that comes along with mex.h

Sign in to comment.

Categories

Find more on Write C Functions Callable from MATLAB (MEX Files) in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!