[英]Gateway function corrupting input from matlab to c++ mex program
我正在測試將稀疏矩陣從Matlab傳遞到C ++ mex程序。 當我返回數組中發送的變量時,它們會損壞。 你知道如何解決這個問題嗎?
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
int M = 0, N = 0, nz = 0, *I = NULL, *J = NULL;
float *val = NULL;
float *x;
float *rhs;
M = (int)mxGetM (prhs[0]);
N = (int)mxGetN (prhs[0]);
nz = (int)mxGetNzmax (prhs[0]);
val = (float *)mxGetPr (prhs[0]);
I = (int *)mxGetIr (prhs[0]);
J = (int *)mxGetJc (prhs[0]);
rhs = (float *)mxGetData(prhs[1]);//b-vec
plhs[0] = mxCreateNumericMatrix(N, 1, mxSINGLE_CLASS, mxREAL);
x = (float *)mxGetData(plhs[0]);
//DisplayMatrix("Input", rhs, N, 1);
//Test
for(int i = 0; i<M; i++){
x[i] = val[i];
}
printf("%d",M);
}
因此,當制作一個稀疏的五個對角矩陣並使用x = mf(A,b)調用此函數時; 返回的x中的條目從0.3擴展到
01e38。 您知道為什么以及如何解決它嗎?
val
的有效值范圍是從0
到nz-1
(最多)。 您正在復制M
值。 另外,請注意, x
的有效范圍是從0
到N-1
但是,如果您的A
是正方形,那么這可能不是問題。
另外,請注意,如果A
是稀疏的,則它可能不能包含float
類型的值,因為MATLAB僅支持double
和logical
的稀疏。 您應該將val
設為double const *
類型。
非常感謝Edric! 這樣就解決了問題!
我將val的初始化更改為
double const *val = NULL;
和輸入到:
val = (double const *)mxGetPr (prhs[0]);
大!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.