matlab调用fortran后崩溃,不知道程序出现什么问题
求大神指教在用mex方法成功生成调用文件之后,使用matlab调用mex文件结果计算崩溃,不知道是什么原因。贴一下我的程序:
! 油膜求解测试程序1——线接触弹性变形方程
subroutine mexFunction(nlhs, plhs, nrhs, prhs)
implicit none
Integer nlhs, nrhs
Integer plhs(*), prhs(*)
Integer mxIsNumeric,mxGetM, mxGetN
Integer mxCreateDoubleMatrix,mxGetPr
Integer N_pr, V_pr
Integer m1,n1,size
real*8 N,V(1000)
m1=mxGetM(prhs(1))
n1=mxGetN(prhs(1))
size=m1*n1
N_pr=mxGetPr(prhs(1))
call mxCopyPtrToReal8(N_pr,N,1)
call LINE(N,V)
plhs(1)=mxCreateDoubleMatrix(1,100,0)
V_pr=mxGetPr(plhs(1))
call mxCopyReal8ToPtr(V,V_pr,100)
return
end
!SUBROUTINE LINE(N,V,m2,n2)
SUBROUTINE LINE(N,V)
!integer m2,n2
DIMENSION P(1000),H0(1000),H(1000),V(1000),X(1000)
X1=1.4
X0=-4.0
DX=(X1-X0)/(N-1.0)
DO I=1,N
X(I)=-4.0+(I-1)*DX
H0(I)=0.5*X(I)*X(I)
H(I)=H0(I)
P(I)=0.0
IF(X(I).GE.-1.0.AND.X(I).LE.1.0)THEN
P(I)=SQRT(1-X(I)*X(I))
ENDIF
ENDDO
CALL SUBAK(N)
CALL VI(N,DX,P,V)
DO I=1,N
H(I)=H(I)+V(I)
ENDDO
STOP
END
SUBROUTINE VI(N,DX,P,V)
DIMENSION P(N),V(N)
COMMON /COMAK/AK(0:1100)
PAI1=0.318309886
C=ALOG(DX)
DO 10 I=1,N
V(I)=0.0
DO 10 J=1,N
IJ=IABS(I-J)
10 V(I)=V(I)+(AK(IJ)+C)*DX*P(J)
DO I=1,N
V(I)=-PAI1*V(I)
ENDDO
RETURN
END
SUBROUTINE SUBAK(MM)
COMMON /COMAK/AK(0:1100)
DO 10 I=0,MM
10 AK(I)=(I+0.5)*(ALOG(ABS(I+0.5))-1.)-(I-0.5)*(ALOG(ABS(I-0.5))-1.)
RETURN
END
给出出错的提示。 li913 发表于 2018-1-6 17:31
给出出错的提示。
这个是出错后的信息
MATLAB crash file:C:\Users\ADMINI~1\AppData\Local\Temp\matlab_crash_dump.7508-1:
------------------------------------------------------------------------
Access violation detected at Wed Dec 27 13:43:57 2017
------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled
Default Encoding : GBK
MATLAB Architecture: win64
MATLAB Root : D:\matlab2014a
MATLAB Version : 8.3.0.532 (R2014a)
Operating System : Microsoft Windows 7 旗舰版
Processor ID : x86 Family 6 Model 58 Stepping 9, GenuineIntel
Virtual Machine : Java 1.7.0_11-b21 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
Window System : Version 6.1 (Build 7601: Service Pack 1)
Fault Count: 1
Abnormal termination:
Access violation
Register State (from fault):
RAX = 0000000000000008RBX = 0000000000000000
RCX = 0000000004029f40RDX = 6f9ffec06c1f7fa0
RSP = 0000000004029ec8RBP = 000000000402b060
RSI = 000000000402b060RDI = 000000000402af40
R8 = 0000000000000008 R9 = 0000000000000001
R10 = 0000000000000001R11 = 0000000004029f40
R12 = 000007fef8460000R13 = 00000000706c92a0
R14 = 0000000000000001R15 = 000000000402b060
RIP = 000000007928bfbfEFL = 00010202
CS = 0033 FS = 0053 GS = 002b
Stack Trace (from fault):
0x000000007928bfbf D:\matlab2014a\bin\win64\MSVCR100.dll+00245695 memmove+00000095
0x000007fef84610a5 F:\LINE.mexw64+00004261 MEXFUNCTION+00000165
0x00000000fc5ef700 D:\matlab2014a\bin\win64\libmex.dll+00063232 mexRunMexFile+00000112
0x00000000fc5ee1e2 D:\matlab2014a\bin\win64\libmex.dll+00057826 inSwapMexfileReader+00000226
0x00000000fc5ef294 D:\matlab2014a\bin\win64\libmex.dll+00062100 _constructor_lm_mexmaci64+00001620
0x000000000580be4f D:\matlab2014a\bin\win64\m_dispatcher.dll+00048719 Mfh_file::dispatch_fh+00000687
0x000000000580c77a D:\matlab2014a\bin\win64\m_dispatcher.dll+00051066 Mfunction_handle::dispatch+00000810
0x0000000005985e04 D:\matlab2014a\bin\win64\m_interpreter.dll+00744964 MathWorks::MException::MExceptionEnvelope::GetID+00539764
0x0000000005970782 D:\matlab2014a\bin\win64\m_interpreter.dll+00657282 MathWorks::MException::MExceptionEnvelope::GetID+00452082
0x0000000005963f6f D:\matlab2014a\bin\win64\m_interpreter.dll+00606063 MathWorks::MException::MExceptionEnvelope::GetID+00400863
[ 10] 0x000000000594cd43 D:\matlab2014a\bin\win64\m_interpreter.dll+00511299 MathWorks::MException::MExceptionEnvelope::GetID+00306099
[ 11] 0x000000000595644f D:\matlab2014a\bin\win64\m_interpreter.dll+00549967 MathWorks::MException::MExceptionEnvelope::GetID+00344767
[ 12] 0x0000000005964962 D:\matlab2014a\bin\win64\m_interpreter.dll+00608610 MathWorks::MException::MExceptionEnvelope::GetID+00403410
[ 13] 0x000000000596192c D:\matlab2014a\bin\win64\m_interpreter.dll+00596268 MathWorks::MException::MExceptionEnvelope::GetID+00391068
[ 14] 0x00000000059711c9 D:\matlab2014a\bin\win64\m_interpreter.dll+00659913 MathWorks::MException::MExceptionEnvelope::GetID+00454713
[ 15] 0x000000000580c00e D:\matlab2014a\bin\win64\m_dispatcher.dll+00049166 Mfh_file::dispatch_fh+00001134
[ 16] 0x000000000580c77a D:\matlab2014a\bin\win64\m_dispatcher.dll+00051066 Mfunction_handle::dispatch+00000810
[ 17] 0x00000000059e4a0e D:\matlab2014a\bin\win64\m_interpreter.dll+01133070 inValidateLoadedObject+00003486
[ 18] 0x00000000059ebd95 D:\matlab2014a\bin\win64\m_interpreter.dll+01162645 inResetInterpreter+00005029
[ 19] 0x00000000059f0a05 D:\matlab2014a\bin\win64\m_interpreter.dll+01182213 MathWorks::MException::MExceptionEnvelope::Copy+00010997
[ 20] 0x00000000059f09d2 D:\matlab2014a\bin\win64\m_interpreter.dll+01182162 MathWorks::MException::MExceptionEnvelope::Copy+00010946
[ 21] 0x00000000059f0997 D:\matlab2014a\bin\win64\m_interpreter.dll+01182103 MathWorks::MException::MExceptionEnvelope::Copy+00010887
[ 22] 0x0000000005dde89c D:\matlab2014a\bin\win64\m_interpreter.dll+05302428 inMexPutVariable+00004204
[ 23] 0x0000000005ddebf6 D:\matlab2014a\bin\win64\m_interpreter.dll+05303286 inMexPutVariable+00005062
[ 24] 0x0000000005ddf02e D:\matlab2014a\bin\win64\m_interpreter.dll+05304366 inMexPutVariable+00006142
[ 25] 0x0000000005ddf36c D:\matlab2014a\bin\win64\m_interpreter.dll+05305196 inMexPutVariable+00006972
[ 26] 0x0000000005cf0161 D:\matlab2014a\bin\win64\m_interpreter.dll+04325729 inEvalCmdWithLocalReturn+00000065
[ 27] 0x000000000634becd D:\matlab2014a\bin\win64\libmwbridge.dll+00048845 mnDebugPrompt+00000109
[ 28] 0x000000000634cfaf D:\matlab2014a\bin\win64\libmwbridge.dll+00053167 mnParser+00000735
[ 29] 0x00000000fd0afae4 D:\matlab2014a\bin\win64\mcr.dll+00195300 mcrInstance::mnParser_on_interpreter_thread+00000036
[ 30] 0x00000000fd093af0 D:\matlab2014a\bin\win64\mcr.dll+00080624 mcr::runtime::setInterpreterThreadToCurrent+00029488
[ 31] 0x00000000fd093b50 D:\matlab2014a\bin\win64\mcr.dll+00080720 mcr::runtime::setInterpreterThreadToCurrent+00029584
[ 32] 0x00000000fab6e026 D:\matlab2014a\bin\win64\uiw.dll+00581670 UIW_IsUserMessage+00000086
[ 33] 0x00000000fab6e705 D:\matlab2014a\bin\win64\uiw.dll+00583429 UIW_SetGLIMUserMsg+00000117
[ 34] 0x00000000fab6e789 D:\matlab2014a\bin\win64\uiw.dll+00583561 UIW_SetGLIMUserMsg+00000249
[ 35] 0x00000000775287b2 C:\Windows\system32\USER32.dll+00165810 GetMenuBarInfo+00000626
[ 36] 0x000000007750f587 C:\Windows\system32\USER32.dll+00062855 SystemParametersInfoW+00000247
[ 37] 0x0000000077514815 C:\Windows\system32\USER32.dll+00083989 IsProcessDPIAware+00000453
[ 38] 0x000000000407b4f6 <unknown-module>+00000000
[ 39] 0x000000000402f2c8 <unknown-module>+00000000
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.
为啥不能用matlab改写呢?
考虑版权的问题,可以用pcode加密核心部分的matlab代码 pasuka 发表于 2018-1-7 15:07
为啥不能用matlab改写呢?
考虑版权的问题,可以用pcode加密核心部分的matlab代码 ...
这是一个测试程序,想用这个改一下尝试matlab调用,我需要用到的程序挺麻烦的。可是不知道用这种方式调用出现什么问题 zhangchunyu312 发表于 2018-1-8 16:30
这是一个测试程序,想用这个改一下尝试matlab调用,我需要用到的程序挺麻烦的。可是不知道用这种方式调用 ...
个人建议:
1、电子邮件咨询原作者
2、使用相同的操作系统、matlab以及Fortran编译器版本
3、调试软件自带的测试算例
页:
[1]