C++ 执行mex文件时出现分段错误

C++ 执行mex文件时出现分段错误,c++,matlab,mex,C++,Matlab,Mex,我正在尝试使用mex文件为现有应用程序创建一个matlab接口。 我已经成功创建了*.mexa64文件,并且能够运行可执行文件一次/两次。 但如果我连续执行它两次以上,就会出现分段错误,matlab崩溃 我添加的代码片段如下所示 void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) { argc=nrhs+1; argv=new char*[argc]; int i,j; argv[0]=new

我正在尝试使用mex文件为现有应用程序创建一个matlab接口。 我已经成功创建了*.mexa64文件,并且能够运行可执行文件一次/两次。 但如果我连续执行它两次以上,就会出现分段错误,matlab崩溃

我添加的代码片段如下所示

void  mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
argc=nrhs+1;
argv=new char*[argc];
int i,j;


argv[0]=new char[(strlen("./learnwts")+1)*sizeof(char)];
strcpy(argv[0],"./learnwts");

for(i=0;i<nrhs;i++)
{
    j=i+1;
    argv[j]=new char[(mxGetN(prhs[i]) + 1)*sizeof(char)];
    mxGetString(prhs[i], argv[j], mxGetN(prhs[i]) + 1);
}
我还创建了一个mexatexit函数来删除通过new操作符分配的内存

void cleanup()
{
for(i=0;i<argc;i++)
{
    delete[] argv[i];
}
delete[] argv;
}
我想不出这个错误。
以前有人遇到过这种情况吗。有人能帮我找出我犯的错误吗?

为什么界面这么复杂?你们试过Matlab中的命令吗?所有的输入都是mex字符串吗?是否有可能有一些参数是数字的?我还没有尝试过调试它。会尝试和评论。是的,所有输入到MEX都是字符串,没有数值。我对这个系统命令很天真,也会尝试。谢谢@ ShaiI对C++还不是很习惯,我不知道MATLAB是如何处理一切的。但我对代码还是有点怀疑。我想发生的是。有一个函数可以创建指向数组argv的指针,并将内存分配给堆上的in。当函数结束时,指针超出范围,但内存仍未清理。然后您就有了保留的内存,无法再访问内存泄漏。应该删除argv的函数不应该能够这样做,因为无法访问它这里发生了什么?!。如果我是,请纠正我wrong@shai:我已经调试了我的mex文件,没有内存泄漏。我能够成功地为argv阵列分配和解除分配内存。此外,我在原始代码中将cout as打印状态保留到终端,我将它们保持原样。这会有问题吗?我需要用mexPrintf替换所有这些吗声明。如果我错了,请纠正我。