2 Stimmen

Memory-Leck in Mex

Ich mache das unten in einer Schleife mit dims = [1024 768 256]. Ich möchte eine Gruppe von Blöcken, die von block_iter (1 bis 16) geladen werden, in einen RAM-Hardware speichern. Der Speicheranruf scheint eine Speicherleckage anzuzeigen. Mache ich etwas falsch?

for (block_iter = 1; block_iter <= num_blocks; block_iter++)
{
    //Speicher zur Dateneinlesung zuweisen;
    mxArray *B= mxCreateNumericArray(3, dims, mxUINT8_CLASS, mxREAL); // Zeiger auf 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");

    //Funktionsaufruf RAM_FILL
    ram_fill(d,B);

    //Speicher freigeben;
    mxDestroyArray(B);
    mxDestroyArray(in);
}

P.S: das Speicherleck beträgt etwa 192 MB pro Schleife, was genau der Menge an Daten im Array B entspricht.

0voto

Sridutt Punkte 382
for (block_iter = 1; block_iter <= num_blocks; block_iter++)
{    
        mxArray *B;// = mxCreateNumericArray(3,dims,mxUINT8_CLASS,mxREAL); //Zeiger auf 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];
        //RAM_FILL aufrufen
        ram_fill(d,B,block_iter);
//         mexPrintf("BlockIter %d\n",(int)block_iter);
        //Speicher freigeben;
        mxDestroyArray(B);
        mxDestroyArray(in);
}

Ich habe dies gemacht, da mxCallMatlab mit einem Array von mxArray * funktioniert hat, dies funktioniert gut ohne Speicherleck. Wenn es eine elegantere Lösung gibt, lassen Sie es mich bitte wissen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X