这是我要实现的目标:
MATFile *file = matOpen(this->filename.c_str(),"r");
mxArray *roadstruct = matGetVariable(file, "ROAD");
mxArray *field;
int i;
for (i = 0; i < this->roadFields.size(); i++) {
field = mxGetFieldByNumber(roadstruct,0,i);
if(field != NULL) {
this->road[this->roadFields.at(i).c_str()] = *mxGetPr(field);
}
}
其中
this->road
是std::map<std::string, double>
,而this->roadFields
是std::vector<std::string>
,其中包含.mat文件中ROAD结构的所有字段名称。我在
mxGetPr
调用中遇到访问冲突,我想这是由于返回的数组具有不同的长度?我想我需要以某种方式重新分配内存,但是我还无法弄清楚该怎么做。 最佳答案
对于某些错误,mxGetFieldByNumber()
返回NULL。由于您的段错误发生在mxGetPr()
上,因此表明您正在向其传递非法内容,并且非法内容可能为NULL。
此函数的documentation表示导致返回NULL的常见错误是:
检查
mxGetFieldByNumber()
的返回值,如果它确实为NULL,请检查上面的列表并检查您的输入条件。