2016-07-06 32 views
0

Ich bin ein mex Code zu schreiben und ich denke, dass ich nicht Gedächtnis bin mit sehr effizient. Hier ist was ich tue. Ich Zuteilung für Variablenspeicher wieBefreien Speicher in mex Code

rief
out=mxMalloc(sizeof(double)*N); 

plhs[0]=mxCreateDoubleMatrix(1,N,mxREAL); 

set(plhs[0],out); 

Das Problem ist, dass ich nicht bin Speicher zu befreien, die ich für Variable zuweisen, weil, wenn ich tun werde ich Segmentierung Fehler erhalten, da ich es in Matlab verwenden. Kann mir jemand eine bessere Technik vorschlagen, um die obigen Befehle auszuführen? Gibt es sowieso Speicherplatz um Speicher frei zu machen oder um eine Matrix der Länge 1X N zu vermeiden?

Danke.

Antwort

2

Sie brauchen nicht das Array mit mxMalloc zuzuordnen. mxCreateDoubleMatrixbereits reserviert das Array. Sobald Sie den Zeiger auf diese Daten haben (erhalten mit mxGetPr), können Sie das Array mit den notwendigen Werten füllen.

double *out; 

// Allocate memory for the first output 
plhs[0] = mxCreateDoubleMatrix(1,N,mxREAL); 

// Get the pointer to the output data 
out = mxGetPr(plhs[0]); 

// Run your algorithm here to populate out with the data you need 

Wenn aus irgendeinem Grund Sie Notwendigkeit tun out auf andere Weise zu erstellen, möchten Sie den Inhalt dieser getrennten Anordnung in den Ausgang zu die Freigabe des Speichers vor kopieren.

+0

Denken Sie daran, wir wollen den PLHs [0] zuweisen, was Sie geschrieben haben, scheint mir, dass wir plhs [0 [und Ausgabe darauf zeigt. in meinem Fall ist der Vektor der Daten 1XN und ich versuche es zu plhs [0] zuzuweisen, das ist meine Matlab-Ausgabe. Können Sie Ihre Antwort näher erläutern und können Sie mir auch sagen, ob Ihre Ausgabe und meine Ausgabe identisch sind? – justin

+0

@justin Sorry, ich meinte 'raus'. Sie können 'out' am Anfang zuweisen (mit' mxCreateDoubleMatrix' und dann in den Rest Ihrer mex-Datei einfügen. Es ist nicht notwendig, es separat zuzuweisen. – Suever