Passing int to mex file
显示 更早的评论
Hello,
I wrote a MEX routine that calls a C function which uses "int" rather than double.
The way I fetch the array from MatLab is through a command like:
nc = (int *) mxGetPr(prhs[1]);
However, this works only if, when calling the function from MatLab, I do:
function(...,int32(nc),...);
Otherwise, it crashes, as it calculates an index incorrectly, which I then use to access some elements of an array.
I tried passing the array as a double, and then casting it to a new array within the mex file. Like this:
nc_double = (double *) mxGetPr(prhs[1]);
nc *int;
for (int i=0; i<size_nc; n++)
{
nc[i] = (int) nc_double[i];
}
It compiled, but have me an error: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) using the debugger.
I wonder if there is a more robust way of doing this? Someone on the Matlab side might forget to convert the culprits to int32 and crash the program.
Cheers,
Francesco
1 个评论
Adam
2014-8-5
In terms of someone on the Matlab side forgetting to convert the data you could just write a .m wrapper function for the mex which does the conversion and anyone using the code uses that rather than calling the mex directly. That is what myself and colleagues tend to do.
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Write C Functions Callable from MATLAB (MEX Files) 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!