【发布时间】:2016-10-19 14:41:46
【问题描述】:
我必须在 mex 文件中使用 mxCalloc 函数而不是常规分配,以避免 matlab 在使用 dgesv 时崩溃。 我尝试了很多方法,但都没有奏效。 这是其中一个示例
#include "fintrf.h"
C Gateway subroutine
subroutine mexfunction(nlhs, plhs, nrhs, prhs)
C Declarations
implicit none
C mexFunction arguments:
mwPointer plhs(*), prhs(*)
integer nlhs, nrhs
C Function declarations:
mwPointer mxGetPr
mwPointer mxCreateDoubleMatrix
mwPointer mxGetM
C Pointers to input/output mxArrays:
mwPointer pr_A, pr_B
C Array information:
mwPointer sizea,mxCalloc
real*8 :: A,B
character*120 :: line
C Get the size of the input array.
sizea = mxGetM(prhs(1))
A=mxCalloc(sizea*sizea,8)
B=mxCalloc(sizea*sizea,8)
C Create Fortran array from the input argument.
pr_A = mxGetPr(prhs(1))
call mxCopyPtrToReal8(pr_A,A,sizea**2)
C Create matrix for the return argument.
plhs(1) = mxCreateDoubleMatrix(sizea, sizea, 0)
pr_B = mxGetPr(plhs(1))
write(line,*), sizea
call mexPrintf(line)
B=A
call mxCopyReal8ToPtr(B,pr_B,sizea*sizea)
return
end
当我运行这段代码时,我得到以下结果
A = [0.9575 , 0.1576 ; 0.9649 , 0.9706]
测试(A) = [0.9575 , 0 ; 0.9649 , 0]
但是如果我换行
call mxCopyReal8ToPtr(B,pr_B,sizea*sizea)
到
call mxCopyReal8ToPtr(A,pr_B,sizea*sizea),
结果是正确的
变量 sizea 等于 2,这是正确的,但我无法访问 A 的任何成员,比如 A(1,1),这是我遇到的错误:
错误 #6410:此名称尚未声明为数组或 功能。 [一]
【问题讨论】: