小编use*_*353的帖子

用户定义的结构,带有MATLAB mex函数

我试图通过使用mex函数将我的C代码链接到MATLAB,我担心我很困惑.具体来说,我想知道我是否可以使用自己的用户定义数据类型(例如下面示例中的Person结构).我没有在文档中看到任何建议我可以,但如果不允许这样做会很不幸!这就是我对网关功能的看法:

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])  
{   

 int *inA;   
 int *inB;   
 const mxArray *people;   
 const char *fieldnames[5];  
 int numFields, i;  

 inA = (int *) mxGetPr(prhs[0]);  
 inB = (int *) mxGetPr(prhs[1]);  

 numFields = 5;  
 fieldnames[0] = "home";  
 fieldnames[1] = "work";  
 fieldnames[2] = "mode";  
 fieldnames[3] = "loc1";  
 fieldnames[4] = "loc2";  

 people = mxCreateStructMatrix(1000, 1, numFields, fieldnames);  
 for (i = 0; i < numFields; i++)  
 {  
    mxSetField(people,i,fieldnames[i],mxDuplicateArray(prhs[2]));  
 }  

 makePeople(inA, inB, people);  
Run Code Online (Sandbox Code Playgroud)

}

我的makePeople函数定义如下:

void makePeople(int* A, int* …
Run Code Online (Sandbox Code Playgroud)

c matlab struct mex

5
推荐指数
1
解决办法
1483
查看次数

在最后一行代码上出现段错误

我希望实施一个简单的分子动力学计划.我的第一步是将系统定义为一系列原子,每个原子都有一个类型,一个id号,一个​​三维位置矢量和一个3D速度矢量.以下是我写的程序:

FILE *init;

static int randomVelocity(void)  
{  
     return rand()/RAND_MAX - 0.5;  
}  


int main(int argc, char *argv[])  
{  

    int iType;  
    int iID;  
    int i;  
    double* pdPosition;  
    double* pdVelocity;  
    char* line;  
    Atom* poAtoms;  
    int count = 0;  

    init = fopen("newdat.txt", "r+");  
    srand((unsigned)time(NULL));  
    line = malloc(81*sizeof(char));  
    while (fgets(line, 80, init) != NULL)    
    {  
         char* tok1;  
         char* tok2;  
         char* tok3;  
         char* tok4;  
         tok1 = strtok(line, " \t");  
         if ((tok1 == NULL) || (tok1[0] == '*'))   
         {  
              break;  
         }  
         tok2 = strtok(NULL, " \t"); …
Run Code Online (Sandbox Code Playgroud)

c segmentation-fault

3
推荐指数
1
解决办法
460
查看次数

标签 统计

c ×2

matlab ×1

mex ×1

segmentation-fault ×1

struct ×1