墨西哥内存泄漏

时间:2013-03-11 09:47:28

标签: matlab memory-leaks mex

我正在使用dims = [1024 768 256]进行循环。我想将block_iter(1到16)加载的一组块读入硬件RAM。内存调用似乎显示内存泄漏。我在某处做错了吗?

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中的数据量。

1 个答案:

答案 0 :(得分: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 *数组一起正常工作,这样可以正常工作而不会出现内存泄漏。如果有任何优雅的解决方案,请告诉我。