2013-03-11 82 views
2

我正在做一个与dims = [1024 768 256]循环下面。我想读取一组由block_iter(1到16)加载到硬件RAM中的块。内存调用似乎显示内存泄漏。我在某处做错了吗?Mex中的内存泄漏

for (block_iter = 1; block_iter <= num_blocks; block_iter++) 
{ 
    //Allocate memory to read data; 
    mxArray *B= mxCreateNumericArray(3, dims, mxUINT8_CLASS, mxREAL); // Pointer to mxArray 
    mxArray *in = mxCreateDoubleMatrix(1, 1, mxREAL); 

    mexCallMATLAB(0, NULL, 0, NULL, "memory"); 
    memcpy(mxGetPr(in), &block_iter, sizeof(double)*1*1); 
    mexCallMATLAB(1, &B, 1, &in, "data_feeder"); 

    //Call RAM_FILL 
    ram_fill(d,B); 

    //Deallocate memory; 
    mxDestroyArray(B); 
    mxDestroyArray(in); 
} 

P.S:内存泄漏是围绕192 MB每个环路这正是数据的阵列B量。

回答

0
for (block_iter = 1; block_iter <= num_blocks; block_iter++) 
{  
     mxArray *B;// = mxCreateNumericArray(3,dims,mxUINT8_CLASS,mxREAL); //Pointer to mxArray 
     mxArray *ppLhs[1]; 
     mxArray *in = mxCreateDoubleMatrix(1, 1, mxREAL); 

//   mexCallMATLAB(0,NULL,0,NULL,"memory"); 
     memcpy(mxGetPr(in), &block_iter, sizeof(double)*1*1); 
     mexCallMATLAB(1, ppLhs,1,&in,"data_feeder"); 
     B = ppLhs[0]; 
     //Call RAM_FILL 
     ram_fill(d,B,block_iter); 
//   mexPrintf("BlockIter %d\n",(int)block_iter); 
     //Deallocate memory; 
     mxDestroyArray(B); 
     mxDestroyArray(in); 
} 

我这样做是为mxCallMatlab工作的罚款与mxArray *的数组,这工作正常没有内存泄漏。如果有任何优雅的解决方案,请让我知道。