簡體   English   中英

網關功能破壞了從Matlab到C ++ mex程序的輸入

[英]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的有效值范圍是從0nz-1 (最多)。 您正在復制M值。 另外,請注意, x的有效范圍是從0N-1但是,如果您的A是正方形,那么這可能不是問題。

另外,請注意,如果A是稀疏的,則它可能不能包含float類型的值,因為MATLAB僅支持doublelogical的稀疏。 您應該將val設為double const *類型。

非常感謝Edric! 這樣就解決了問題!

我將val的初始化更改為

    double const *val = NULL; 

和輸入到:

    val = (double const *)mxGetPr (prhs[0]); 

大!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM