内存出现泄漏,该如何解决 生手老碰见这样的问题 谢谢各位大神
void CTestsincplot11_dllView::OnButton32771()
{
// TODO: Add your command handler code here
if(pArrayIn==NULL)
{
pArrayIn=mxCreateDoubleMatrix(1,1,mxREAL);
}
*(mxGetPr(pArrayIn))=10*(0.3+0.7*rand()*1.0/RAND_MAX);// 出现错误
mlfSincplot(1,&pArrayOut,pArrayIn);
CDC*pDC=GetDC();
int i=0;
int j=0,k=0;
CString testStr;
for(i=0;i<mxGetNumberOfElements(pArrayOut);i++)
{
testStr.Format("%6.2f",*(mxGetPr(pArrayOut)+i));
pDC->TextOut(5+j*40,5+k*15,testStr);
j++;
if(j>20)
{
j=0;
k++;
}
}
}
这是我和matlab混编的调用代码
[解决办法]
LZ遇到的问题的关键是在执行以下语句:
*(mxGetPr(pArrayIn))=10*(0.3+0.7*rand()*1.0/RAND_MAX);
之前pArrayIn必须有一个合法的值.
可查一下以下语句:
pArrayIn=mxCreateDoubleMatrix(1,1,mxREAL);
是否执行了,如果执行后pArrayIn还是NULL,可试一下在程序开头加mclInitializeApplication(NULL,0).
还要注意C程序的平台解决方案与MATLAB库是否都是win32或都是x64。如果不一致要出错。
以下用LZ的几行代码做的小程序运行正常:
#include <stdio.h>
#include "mex.h"
#include "mclmcrrt.h"
int main()
{
mxArray *pArrayIn=NULL;
mclInitializeApplication(NULL,0);
if(pArrayIn==NULL)
{
pArrayIn=mxCreateDoubleMatrix(1,1,mxREAL);
}
*(mxGetPr(pArrayIn))=10*(0.3+0.7*rand()*1.0/RAND_MAX);
mclTerminateApplication();
return 0;
}