gpt4 book ai didi

使用 mxArray 的 C++ 动态内存分配

转载 作者:行者123 更新时间:2023-11-30 04:10:18 24 4
gpt4 key购买 nike

这就是我要实现的目标:

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->roadstd::map<std::string, double>this->roadFieldsstd::vector<std::string>包含 .mat 文件中 ROAD 结构的所有字段名称。

我在 mxGetPr 中遇到访问冲突调用,我想这是因为返回的数组长度不同?我想我需要以某种方式重新分配内存,但我一直无法弄清楚如何。

最佳答案

mxGetFieldByNumber() 对于某些错误返回 NULL。由于您的段错误发生在 mxGetPr() 上,这表明您向其传递了非法内容,并且非法内容可能为 NULL。

documentation对于这个函数来说,导致 NULL 返回的常见错误是:

  • 指定一个不指向结构 mxArray 的数组指针 pm。调用 mxIsStruct 判断 pm 是否指向一个结构体 mxArray。
  • 指定指向 mxArray 范围之外的元素的索引。例如,给定包含十个元素的结构 mxArray,您不能在 C 中指定大于 9 的索引(在 Fortran 中为 10)。
  • 指定一个不存在的字段编号。调用 mxGetFieldNumber 以确定与给定字段名称对应的字段编号。

检查 mxGetFieldByNumber() 的返回值,如果确实为 NULL,则检查上面的列表并检查您的输入条件。

关于使用 mxArray 的 C++ 动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com