我正在编写一个mex代码,我想我并没有非常有效地使用内存。这就是我的工作。我正在为像
这样的变量分配内存router.get('/page/module/add/:id', function(req, res) {
Client.find({"emailAddress": emailAddress, "sequence.slug": pageSlug},
{"emailAddress": 1, "sequence.$": 1}, function (err, data) {
if (!err) {
res.statusCode = 200;
buildMod(data);
return res.json(data);
} else {
res.statusCode = 500;
log.error('Internal error(%d): %s', res.statusCode, err.message);
return res.json({
error: 'Server error'
});
}
}).select('sequence emailAddress domain');
});
function buildMod(data) {
getMod(data);
}
function getMod(data) {
Module.find({ 'module_id': moduleNumID }, function (err, module) {
if(!module) {
return false;
}
if (!err) {
writeMod(data);
} else {
return false;
}
});
}
function writeMod(data) {
fs.appendFile(location, content, function(err) {
if (err) throw err;
return true;
});
}
问题是我没有释放我为变量分配的内存,因为如果我这样做,我将收到分段错误,因为我将在Matlab中使用它。所以有人能建议我做一个更好的技术来做上面命令正在做的事情吗?无论如何都要释放内存或避免定义长度为1X N的矩阵
感谢。
答案 0 :(得分:2)
您无需使用mxMalloc
分配数组。 mxCreateDoubleMatrix
已经分配数组。获得指向此数据的指针(使用mxGetPr
获得)后,可以使用必要的值填充数组。
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
如果由于某种原因你做需要以其他方式创建out
,你想在释放内存之前将该单独数组的内容复制到输出中。
double *out;
double *realout;
// Allocate data to use internally
out = mxMalloc(sizeof(double) * N);
// Initialize the array that will be returned to MATLAB
plhs[0] = mxCreateDoubleMatrix(1, N, mxREAL);
realout = mxGetPr(plhs[0]);
// Now copy all values to the MATLAB output
for ( j = 0; j < N; j++ )
realout[j] = out[j];
// Now you can free up memory for out
mxFree(out)