2013-03-11 2 views
2

Я делаю ниже в петле с dims = [1024 768 256]. Я хочу прочитать набор блоков, загруженных block_iter (от 1 до 16) в ОЗУ оборудования. Похоже, что вызов памяти отображает утечку памяти. Я что-то делаю неправильно?Утечка памяти в 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 Мб каждый цикл, который точно количество данных в массиве 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 *, это работает отлично без утечки памяти. Если есть какое-то элегантное решение, сообщите мне.

Смежные вопросы