Greetings everyone, I've only started using MEX file feature in MATLAB and I have run into several problems which I would like to clarify (some of them may be very specific to my C code, yet I do not understand the reasons why they happened in the first place). I have some C code that was written and tested in the Microsoft Visual Studio IDE. Somehow when the code was integrated into my MATLAB .m file, I get a segmentation error (I checked for the arguments passed to the function and they seem OK. To test if things were fine in the event this code was not called from MATLAB, I executed the C code with correct arguments and the program worked fine). I am not sure why this happens. 1. Does the choice of compilers (LCC or Visual Studio) I select using the mex -setup option make a difference to the way the program is supposed to behave - once the mex file is compiled in both cases and I get the desired .dll file? Interestingly my program seems to crash at different instants when I select different compilers. 2. I seem to be getting an error related to m_interpreter.dll and I followed the instructions specified in http://www.mathworks.com/support/solutions/data/33527.html but that didnt help either. Has anyone faced such an issue before? For those interested, a clip of what I see in the error log file (for the Visual Studio compiler) has been attached at the end of this email. 3. What is even more puzzling is that once my program crashed, I recompile and rexecute and there are no segmentation faults this time. I'd greatly appreciate anyone who can give me pointers in this regard. I'd be glad to send the source C files in case you're interested. Sorry for the rather long email and thanks for your time! Sincerely, Palani << error log file >> ---------------------------------- Configuration: MATLAB Version: 6.5.0.180913a (R13) Operating System: Microsoft Windows XP Window System: Version 5.1 (Build 2600) Processor ID: x86 Family 15 Model 2 Stepping 7, GenuineIntel Virtual Machine: Java 1.3.1_01 with Sun Microsystems Inc. Java HotSpot(TM) Client VM (mixed mode) Register State: EAX = 00000000 EBX = 1f031068 ECX = 1d0d802c EDX = 00000030 ESI = 1d0d802c EDI = 00000001 EBP = 00dfd140 ESP = 00dfd130 EIP = 77c1c03a FLG = 00010206 Stack Trace: [0] MSVCRT.DLL:0x77c1c03a(0, 0x1d0d802c, 10, 7) [1] Gateway.dll:0x10161e10(2, 7, 3, 0x10164098 "Creating State Table") [2] Gateway.dll:0x101611c1(0x166cafd0, 9, 8, 0x014785d8) [3] Gateway.dll:0x101610c0(2, 0x00dfd5d0, 7, 3) [4] libmex.dll:_mexRunMexFile(0, 0x00dfd5d0, 5, 0x00dfd6d4) + 71 bytes [5] m_interpreter.dll:void __cdecl inCallMexFunction(int,struct mxArray_tag * * const,int,struct mxArray_tag * * const,void (__cdecl*)(int,struct mxArray_tag * * const,int,struct mxArray_tag * * const),struct _mex_context *,struct mexfiles *)(0, 0x00dfd5d0, 5, 0x00dfd6d4) + 476 bytes [6] m_interpreter.dll:void __cdecl inRunMexFile(int,struct mxArray_tag * * const,int,struct mxArray_tag * * const,struct mexfiles *)(0, 0x00dfd5d0, 5, 0x00dfd6d4) + 126 bytes [7] m_interpreter.dll:void __cdecl inExecMexFile(int,int,struct mxArray_tag * * const,struct MATLAB_Function_tag *)(0, 5, 0x00dfd6d4, 0x1c033da8) + 82 bytes [8] m_interpreter.dll:_inExecFunction(0, 5, 0x00dfd6d4, 0x1c033da8) + 38 bytes [9] m_interpreter.dll:_inMMexExecute(635, 0x1c033da8, 0, 5) + 533 bytes [10] m_interpreter.dll:enum opcodes __cdecl inMMex(char const *,int,int,int,int *,int *)(0x01382f60 "Gateway", 635, 0, 5) + 94 bytes [11] m_interpreter.dll:int __cdecl inInterp(enum inDebugCheck,int,int,struct inPcodeNest_tag volatile *)(2, 0, 0, 0x166f2ec8) + 2143 bytes [12] m_interpreter.dll:_inInterPcode(2, 0x00dfdc54, 0, 0) + 193 bytes [13] m_interpreter.dll:enum inExecutionStatus __cdecl in_local_call_eval_function(int *,struct _m_parser_interface *,struct _pcodeheader *,int *,struct mxArray_tag * * const,enum inDebugCheck)(0, 0x7a87fa78, 0x00dfdc54, 0x00dfdcf8) + 174 bytes [14] m_interpreter.dll:_inEvalStringWithIsVarFcn(0x1633ecc0 "Gateway(d_array, h, M, N, L)\n", 29, 0, 0) + 531 bytes [15] m_interpreter.dll:_inEvalString(0x1633ecc0 "Gateway(d_array, h, M, N, L)\n", 29, 0, 0) + 50 bytes [16] m_interpreter.dll:enum inExecutionStatus __cdecl inEvalCmdWithLocalReturnandtype(char const *,int *,enum inDebugCheck)(0x1633ecc0 "Gateway(d_array, h, M, N, L)\n", 0, 2, 0x00dfde30) + 68 bytes [17] m_interpreter.dll:_inEvalCmdNoEnd(0x1633ecc0 "Gateway(d_array, h, M, N, L)\n", 1, 0x0047f617, 11) + 16 bytes [18] matlab.exe:_mnParser(0, 271244, 0, 48) + 1001 bytes [19] matlab.exe:_WinMain@16(0x00400000 "MZ", 0, 271244, 1) + 3872 bytes [20] matlab.exe:_WinMainCRTStartup(0, 1, 0x7ffdf000, 0x00450058) + 308 bytes [21] kernel32.dll:0x77e7eb69(0x0047172c, 0, 0, 1245343) ____________________________________________________________ Yahoo! Messenger - Communicate instantly..."Ping" your friends today! Download Messenger Now http://uk.messenger.yahoo.com/download/index.html |
|
Segmentation errors with MEX files
Started by ●May 2, 2004
Reply by ●May 3, 20042004-05-03
Hello Palani,
I too had faced a similar
problem sometime back. Well I am not an expert. But going by the warnings, it
appears that you seem to be having problem with pointers. It is slightly
difficult to handle pointers in Matlab and also with persistence of variables.
The persistence of variables in C do not hold exactly true in Matlab. The Matlab
compiler allows you to create variables, but trying to access those memory
locations for clearing them will lead to this type of errors. Pay special
attention to the storage class especially if you are working with multiple
instantiations. Let your program not delete any pointers that you have created.
Let Matlab handle the clearing part. Hence try and avoid static, volatile
variables. You may like to go through the doccumentation specifically on the
subject I mentioned.
The compilers do not play a
major role as you are anticipating. Use the -g option for creating the debug
information. You may visit the Matlab site and look for help on
Debugging method for dll files. Try to debug and locate the exact
fault.
I hope these pointers help
you in overcomming the problem. All the best,
-Snehamoy
|