作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在将一个 mat
文件导入到我的 C++ 代码中。导入数据、计算并保存到另一个地方后,我想释放原始数据占用的内存。
是否有任何特定功能可以执行此操作。只删除 mxGetData()
返回的指针会释放内存吗?
这是我创建的用于导入 mat 文件的类
#ifndef READMAT_H
#define READMAT_H
#include "mat.h"
#include "matrix.h"
#include "mex.h"
#include "program_exception.h"
#include "stdint.h"
class readmat
{
private:
const size_t *dimarray;
const char **dir;
MATFile *pmat;
int ndir;
mxArray *painfo,*pa;
const char *file;
int minute;
int second;
const char *name;
const char *name1;
bool isdouble;
no_mat_exception noMAT;
public:
//with default value
readmat(const char *f);
// get number of dimensions
int getnumbrofdimensions() const;
// get pointer to array
void* getarraypointer() const;
// get pointer to each dimension size
const size_t* dimensionpointer() const;
//number of elements
int numberofelements() const;
~readmat();
};
#endif
以下是cpp实现
#include "readmat.h"
#include <iostream>
#include "mat.h"
#include "matrix.h"
#include "mex.h"
using namespace std;
// set the file name
readmat::readmat(const char *f)
{
file = f;
pmat = matOpen(file, "r");
if (pmat == NULL) {
throw noMAT;
}
else
{
dir = (const char **)matGetDir(pmat, &ndir);
if (dir == NULL) {
printf("Error reading directory of file %s\n", file);
}
else if (ndir > 1)
{
cout << "The number of variables are larger than 1" << endl;
}
else
{
mxFree(dir);
matClose(pmat);
pmat = matOpen(file, "r");
if (pmat == NULL) {
throw noMAT;
}
else
{
painfo = matGetNextVariableInfo(pmat, &name);
matClose(pmat);
}
pmat = matOpen(file, "r");
if (pmat == NULL) {
throw noMAT;
}
else
{
pa = matGetNextVariable(pmat, &name1);
matClose(pmat);
}
}
}
}
int readmat::getnumbrofdimensions() const
{
return mxGetNumberOfDimensions(painfo);
}
void* readmat::getarraypointer() const
{
//return mxGetPr(pa);
return mxGetData(pa);
}
const size_t* readmat::dimensionpointer() const
{
return mxGetDimensions(painfo);
}
int readmat::numberofelements() const
{
return mxGetNumberOfElements(painfo);
}
readmat::~readmat()
{
mxFree(pa);
mxFree(painfo);
}
这里,当我删除目标程序时,会在文件 free.c 中触发一个断点。
最佳答案
edit([matlabroot '/extern/examples/eng_mat/matdgns.c']);
上的 MATLAB 演示似乎建议使用 mxDestroyArray
而不是 mxFree
。
关于c++ - 如何释放 mxGetData() 分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520385/
我正在将一个 mat 文件导入到我的 C++ 代码中。导入数据、计算并保存到另一个地方后,我想释放原始数据占用的内存。 是否有任何特定功能可以执行此操作。只删除 mxGetData() 返回的指针会释
我正在尝试编写一个简单的 mex 函数。我有一个整数输入,它是我的对象的数量。当我编译 myMEX_1.cpp 并使用任何输入值通过 MATLAB 调用它时,我总是得到: Number of Requ
我是一名优秀的程序员,十分优秀!