why do i get the segmentation error while running a mex file? how do i solve this?

조회 수: 4 (최근 30일)
Segmentation violation detected at Wed May 06 10:52:35 2015 ------------------------------------------------------------------------
Configuration: Crash Decoding : Disabled Default Encoding : windows-1252 MATLAB Architecture: win64 MATLAB Root : C:\Program Files\MATLAB\R2013a MATLAB Version : 8.1.0.604 (R2013a) Operating System : Microsoft Windows 7 Processor ID : x86 Family 6 Model 60 Stepping 3, GenuineIntel Virtual Machine : Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot™ 64-Bit Server VM mixed mode Window System : Version 6.1 (Build 7601: Service Pack 1)
Fault Count: 1
Abnormal termination: Segmentation violation
Register State (from fault): RAX = 000087b8544ba344 RBX = ffffffff98108450 RCX = ffffffff98108450 RDX = 000000009809b880 RSP = 0000000004026600 RBP = 0000000004027680 RSI = 00000000980adfa0 RDI = 0000000000000000
R8 = 0000000000000000 R9 = 0000000000000201
R10 = 0000000075a20000 R11 = 0000000004027680
R12 = 000000000000127f R13 = 000000002268bc30
R14 = 0000000000000003 R15 = 0000000004027680
RIP = 000007fef98219a5 EFL = 00010206
CS = 0033 FS = 0053 GS = 002b
Stack Trace (from fault): [ 0] 0x000007fef98219a5 D:\mangalore\downloads\SFMedu2\denseMatch\priority_queue_1.0\pq_push.mexw64+00006565 [ 1] 0x0000000004e2f731 C:\Program Files\MATLAB\R2013a\bin\win64\libmex.dll+00063281 mexRunMexFile+00000129 [ 2] 0x0000000004e2e202 C:\Program Files\MATLAB\R2013a\bin\win64\libmex.dll+00057858 inSwapMexfileReader+00000226 [ 3] 0x0000000004e2f2b4 C:\Program Files\MATLAB\R2013a\bin\win64\libmex.dll+00062132 _constructor_lm_mexmaci64+00001620 [ 4] 0x0000000074e8c64f C:\Program Files\MATLAB\R2013a\bin\win64\m_dispatcher.dll+00050767 Mfh_file::dispatch_fh+00000623 [ 5] 0x0000000074e8ced2 C:\Program Files\MATLAB\R2013a\bin\win64\m_dispatcher.dll+00052946 Mfunction_handle::dispatch+00000802 [ 6] 0x00000000046dbc7b C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00834683 inDestroyWS+00392123 [ 7] 0x00000000046cb091 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00766097 inDestroyWS+00323537 [ 8] 0x00000000046b008f C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00655503 inDestroyWS+00212943 [ 9] 0x00000000046c65a4 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00746916 inDestroyWS+00304356 [ 10] 0x00000000046bc3b0 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00705456 inDestroyWS+00262896 [ 11] 0x00000000046b8fe4 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00692196 inDestroyWS+00249636 [ 12] 0x00000000046d021f C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00786975 inDestroyWS+00344415 [ 13] 0x00000000046d0370 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00787312 inDestroyWS+00344752 [ 14] 0x00000000046af1dd C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00651741 inDestroyWS+00209181 [ 15] 0x00000000046b0bd0 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00658384 inDestroyWS+00215824 [ 16] 0x000000000469cf79 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00577401 inDestroyWS+00134841 [ 17] 0x0000000074e8c64f C:\Program Files\MATLAB\R2013a\bin\win64\m_dispatcher.dll+00050767 Mfh_file::dispatch_fh+00000623 [ 18] 0x0000000074e8ced2 C:\Program Files\MATLAB\R2013a\bin\win64\m_dispatcher.dll+00052946 Mfunction_handle::dispatch+00000802 [ 19] 0x00000000046b6d48 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00683336 inDestroyWS+00240776 [ 20] 0x000000000462f9f7 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00129527 inFullEvalFcn+00022023 [ 21] 0x00000000046ba877 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00698487 inDestroyWS+00255927 [ 22] 0x00000000046d021f C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00786975 inDestroyWS+00344415 [ 23] 0x00000000046d0370 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00787312 inDestroyWS+00344752 [ 24] 0x00000000046af1dd C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00651741 inDestroyWS+00209181 [ 25] 0x00000000046b0bd0 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00658384 inDestroyWS+00215824 [ 26] 0x000000000469cf79 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00577401 inDestroyWS+00134841 [ 27] 0x0000000074e8c64f C:\Program Files\MATLAB\R2013a\bin\win64\m_dispatcher.dll+00050767 Mfh_file::dispatch_fh+00000623 [ 28] 0x0000000074e8ced2 C:\Program Files\MATLAB\R2013a\bin\win64\m_dispatcher.dll+00052946 Mfunction_handle::dispatch+00000802 [ 29] 0x000000000461e70e C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00059150 inValidateLoadedObject+00002350 [ 30] 0x0000000004726495 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+01139861 IInterpreter::IInterpreter+00000229 [ 31] 0x000000000472ca45 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+01165893 inRegisterFunctionHandles+00004405 [ 32] 0x000000000472ca12 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+01165842 inRegisterFunctionHandles+00004354 [ 33] 0x000000000472c9d7 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+01165783 inRegisterFunctionHandles+00004295 [ 34] 0x000000000471ba0e C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+01096206 inGetSeqVarPtrsFromCurrentWS+00005742 [ 35] 0x000000000461be89 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00048777 inEvalCmdWithLocalReturn+00000329 [ 36] 0x000000000461bdcc C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00048588 inEvalCmdWithLocalReturn+00000140 [ 37] 0x000000000461bd81 C:\Program Files\MATLAB\R2013a\bin\win64\m_interpreter.dll+00048513 inEvalCmdWithLocalReturn+00000065 [ 38] 0x0000000079fbbecd C:\Program Files\MATLAB\R2013a\bin\win64\libmwbridge.dll+00048845 mnDebugPrompt+00000109 [ 39] 0x0000000079fbd01b C:\Program Files\MATLAB\R2013a\bin\win64\libmwbridge.dll+00053275 mnParser+00000763 [ 40] 0x000000007499daa4 C:\Program Files\MATLAB\R2013a\bin\win64\mcr.dll+00187044 mcrInstance::mnParser_on_interpreter_thread+00000036 [ 41] 0x0000000074982220 C:\Program Files\MATLAB\R2013a\bin\win64\mcr.dll+00074272 mcr::setInterpreterThreadToCurrent+00031664 [ 42] 0x0000000074982280 C:\Program Files\MATLAB\R2013a\bin\win64\mcr.dll+00074368 mcr::setInterpreterThreadToCurrent+00031760 [ 43] 0x0000000005ebf9d6 C:\Program Files\MATLAB\R2013a\bin\win64\uiw.dll+00391638 UIW_IsUserMessage+00000086 [ 44] 0x0000000005ec0095 C:\Program Files\MATLAB\R2013a\bin\win64\uiw.dll+00393365 UIW_SetGLIMUserMsg+00000117 [ 45] 0x00000000773187fe C:\Windows\system32\USER32.dll+00165886 GetMenuBarInfo+00000638 [ 46] 0x00000000772ff5fb C:\Windows\system32\USER32.dll+00062971 SystemParametersInfoW+00000235 [ 47] 0x0000000077304895 C:\Windows\system32\USER32.dll+00084117 IsProcessDPIAware+00000465 [ 48] 0x00000000774411f5 C:\Windows\SYSTEM32\ntdll.dll+00332277 KiUserCallbackDispatcher+00000031 [ 49] 0x000000007730908a C:\Windows\system32\USER32.dll+00102538 PeekMessageW+00000186 [ 50] 0x00000000773050fe C:\Windows\system32\USER32.dll+00086270 GetKeyState+00000238 [ 51] 0x0000000077303a6f C:\Windows\system32\USER32.dll+00080495 PeekMessageA+00000087 [ 52] 0x0000000005e99a1b C:\Program Files\MATLAB\R2013a\bin\win64\uiw.dll+00236059 UIW_SetCurrentDialog+00000731 [ 53] 0x0000000005ec1532 C:\Program Files\MATLAB\R2013a\bin\win64\uiw.dll+00398642 ws_FreeSystemFont+00000482 [ 54] 0x0000000004338930 C:\Program Files\MATLAB\R2013a\bin\win64\libmwservices.dll+00887088 services::system_events::PpeDispatchHook::~PpeDispatchHook+00055600 [ 55] 0x00000000043392f5 C:\Program Files\MATLAB\R2013a\bin\win64\libmwservices.dll+00889589 services::system_events::PpeDispatchHook::~PpeDispatchHook+00058101 [ 56] 0x000000000433a100 C:\Program Files\MATLAB\R2013a\bin\win64\libmwservices.dll+00893184 services::system_events::PpeDispatchHook::~PpeDispatchHook+00061696 [ 57] 0x00000000043428d2 C:\Program Files\MATLAB\R2013a\bin\win64\libmwservices.dll+00927954 svWS_ProcessPendingEvents+00001090 [ 58] 0x000000007498329d C:\Program Files\MATLAB\R2013a\bin\win64\mcr.dll+00078493 mcr::setInterpreterThreadToCurrent+00035885 [ 59] 0x0000000074983562 C:\Program Files\MATLAB\R2013a\bin\win64\mcr.dll+00079202 mcr::setInterpreterThreadToCurrent+00036594 [ 60] 0x0000000074976915 C:\Program Files\MATLAB\R2013a\bin\win64\mcr.dll+00026901 mcrInstantiationError::operator=+00003781 [ 61] 0x0000000074979d52 C:\Program Files\MATLAB\R2013a\bin\win64\mcr.dll+00040274 mcr_invoke_on_interpreter_thread+00001602 [ 62] 0x0000000140005591 C:\Program Files\MATLAB\R2013a\bin\win64\MATLAB.exe+00021905 [ 63] 0x0000000140005c3a C:\Program Files\MATLAB\R2013a\bin\win64\MATLAB.exe+00023610 [ 64] 0x0000000140006103 C:\Program Files\MATLAB\R2013a\bin\win64\MATLAB.exe+00024835 [ 65] 0x00000000771e59ed C:\Windows\system32\kernel32.dll+00088557 BaseThreadInitThunk+00000013 [ 66] 0x000000007741c541 C:\Windows\SYSTEM32\ntdll.dll+00181569 RtlUserThreadStart+00000033
This error was detected while a MEX-file was running. If the MEX-file is not an official MathWorks function, please examine its source code for errors. Please consult the External Interfaces Guide for information on debugging MEX-files.
If this problem is reproducible, please submit a Service Request via: http://www.mathworks.com/support/contact_us/
A technical support engineer might contact you with further information.
Thank you for your help.** This crash report has been saved to disk as C:\Users\smv02\AppData\Local\Temp\matlab_crash_dump.4016-1
Caught MathWorks::System::FatalException [Please exit and restart MATLAB]>>
this is the error i get while running a simple mex file to push values to stack
  댓글 수: 1
Yong Xu
Yong Xu 2017년 12월 12일
Hi, Swathi Recently, i met the same issue like you. I cannot run the script. Could you tell me how to fix this issue? Many thanks. Yong

댓글을 달려면 로그인하십시오.

채택된 답변

James Tursa
James Tursa 2015년 5월 6일
편집: James Tursa 2015년 5월 6일
What are the types of the variables you are passing in? E.g., here is a check at the beginning or mexFunction for the 1st argument:
if( !mxIsNumeric(prhs[0]) )
mexErrMsgTxt("parameter 1 missing!\n");
So 1st argument will get past this check if it is any numeric class (e.g., int32). Then you pass it here:
retrieve_heap( prhs[0], heap);
And you use it here:
void retrieve_heap( const mxArray* matptr, MaxHeap<double>* & heap){
// retrieve pointer from the MX form
double* pointer0 = mxGetPr(matptr);
// check that I actually received something
if( pointer0 == NULL )
mexErrMsgTxt("vararg{1} must be a valid priority queue pointer\n");
// convert it to "long" datatype (good for addresses)
long pointer1 = (long) pointer0[0];
// convert it to "KDTree"
heap = (MaxHeap<double>*) pointer1;
But this latter code will only work if the 1st argument is double class. It will not work for any other class, and will likely seg fault if it is a shorter class (e.g., int32).
Also, you are type punning here ... taking a double and converting it to a long and then type casting it to a pointer. That will only have a chance of working on a 32-bit system where pointers will fit entirely in the mantissa of a double ... it will have no hope of working on a 64-bit system (to do that would necessitate using a uint64 or int64).
Where is this heap address originally coming from?
  댓글 수: 2
swathi S Rao
swathi S Rao 2015년 5월 13일
편집: swathi S Rao 2015년 5월 13일
the variables that am passing in are a pointer, an index value and a value to be pushed into the queue. heap is paased through a .m file which calls for push.m function
pq_push(match_heap, match_pair_size, match_pair(match_pair_size,5));
this is the link to program that am trying to run. http://vision.princeton.edu/courses/SFMedu/
SHISHIR PARAMATHMA RAO
SHISHIR PARAMATHMA RAO 2015년 10월 24일
For the priority code to work for 64 bit, you need to change every occurrence of long in all the cpp files to unsigned long long and compile all the cpp files again using mex *.cpp in the command window.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Alka Nair
Alka Nair 2015년 5월 6일
  댓글 수: 3
James Tursa
James Tursa 2015년 5월 6일
Please post your code and how you are calling the routine.
swathi S Rao
swathi S Rao 2015년 5월 6일
편집: James Tursa 2015년 5월 6일
#include "MyHeap.h"
#define toSysout(...) printf(__VA_ARGS__)
#define exit_with_error(...) \
do { \
fprintf(stdout, "Error: "); \
fprintf(stdout, __VA_ARGS__ ); \
fprintf(stdout, "\n" ); \
exit(1); \
} while(0)
#ifdef MATLAB_MEX_FILE
#include "mex.h"
void retrieve_heap( const mxArray* matptr, MaxHeap<double>* & heap){
// retrieve pointer from the MX form
double* pointer0 = mxGetPr(matptr);
// check that I actually received something
if( pointer0 == NULL )
mexErrMsgTxt("vararg{1} must be a valid priority queue pointer\n");
// convert it to "long" datatype (good for addresses)
long pointer1 = (long) pointer0[0];
// convert it to "KDTree"
heap = (MaxHeap<double>*) pointer1;
// check that I actually received something
if( heap == NULL )
mexErrMsgTxt("vararg{1} must be a valid priority queue pointer\n");
}
void retrieve_index( const mxArray* matptr, int& index){
// check that I actually received something
if( matptr == NULL )
mexErrMsgTxt("missing second parameter (element index)\n");
if( 1 != mxGetM(matptr) || !mxIsNumeric(matptr) || 1 != mxGetN(matptr) )
mexErrMsgTxt("second parameter should be a unique integer array index\n");
// retrieve index
index = (int) mxGetScalar(matptr);
if( index % 1 != 0 )
mexErrMsgTxt("the index should have been an integer!\n");
}
void retrieve_cost( const mxArray* matptr, double& cost){
// check that I actually received something
if( matptr == NULL )
mexErrMsgTxt("missing third parameter (element index)\n");
if( 1 != mxGetM(matptr) || !mxIsNumeric(matptr) || 1 != mxGetN(matptr) )
mexErrMsgTxt("second parameter should be a unique integer array index\n");
// retrieve index
cost = (double) mxGetScalar(matptr);
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
if( nrhs!=3 )
mexErrMsgTxt("This function requires 3 arguments\n");
if( !mxIsNumeric(prhs[0]) )
mexErrMsgTxt("parameter 1 missing!\n");
if( !mxIsNumeric(prhs[1]) )
mexErrMsgTxt("parameter 2 missing!\n");
if( !mxIsNumeric(prhs[2]) )
mexErrMsgTxt("parameter 3 missing!\n");
// retrieve the heap
MaxHeap<double>* heap;
retrieve_heap( prhs[0], heap);
// retrieve the parameters
int index;
retrieve_index( prhs[1], index );
double cost;
retrieve_cost( prhs[2], cost);
// push in the PQ
heap->push( cost, index-1 );
// return control to matlab
return;
}
#endif

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Simulation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by