C 结构中的分段错误。使用 Matlab Coder 从 Matlab->C 翻译的代码
C Segmentation fault in struct. Code translated from Matlab->C with Matlab Coder
我正在用Matlab编码器将一些Matlab函数翻译成C。一切都进行到我想要从函数返回一个数组(转置向量)的地步。
在Matlab中,我有一个函数:
function returnedArray = myFun(input arguments)
<function code>
对C中函数的调用将translatet转换为:
void myFun(input arguments, emxArray_realT *returnedArray)
<function code>
emxArray_real_T是一个结构,由Matlab编码器生成:
struct emxArray_real_T
{
real_T *data;
int32_T *size;
int32_T allocatedSize;
int32_T numDimensions;
boolean_T canFreeData;
};
而real_T,int32_T。。。创建了通用类型定义:
typedef double real_T;
我称之为myFun从主要:
struct emxArray_real_T *result = malloc(sizeof(struct emxArray_real_T));
myFun(input arguments, result);
当我运行这个程序时,我会得到一个错误:Segmentation fault。gdb给了我这个:
Program received signal SIGSEGV, Segmentation fault at:
99643: i0=retArray->size[0];
p retArray
$1 = (emxArray_real_T *) 0xc1d010
p retArray.size
$2 = (int32_T *) 0x0
p retArray.size[0]
Cannot access memora ar adress 0x0
我的主要职能是不是做错了什么?我希望如此,因为用C语言从Matlab翻译的代码一团糟,或者可能只是对我这个新手来说。如果我在没有返回值的情况下用C进行翻译和编译,代码会很好地工作。
您可以从main调用它:
struct emxArray_real_T *result = malloc(sizeof(struct emxArray_real_T));
// result->size == 0;
// You would need to initialize this too.
// Somewhere in myFun it is accessed like this:
// *retArray->size = x;
// or
// x = *retArray->size;
// which causes the fault.
myFun(input arguments, result);
由于我对Matlab一无所知,我无法告诉你这是你必须做的事情,还是应该由某个地方生成的代码来完成。
你可以试着这样修复它:
result->size = malloc(sizeof(int32_T));
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- EASTL矢量<向量<int>>连续的
- MATLAB to C++: csvread() not supported by MATLAB Coder
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- MATLAB:跟踪imufilter对象中的状态变化
- 如何将 c++ 中的客户端 TCP 的替身列表发送到 Matlab 中的 TCP 服务器?
- 将三角函数的正确值与matlab进行比较
- 连接 MATLAB 和 Visual Studios 的问题
- 如何将C++连接到 Matlab
- 如何发送 Mat H=findHomography 返回 Matlab
- 如何在C++中编写 MATLAB fix(X) 函数?
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 有没有更好的方法可以使用特征/C++实现 matlab 的逻辑索引?
- 当我运行MEX文件时,MATLAB崩溃
- 从 MATLAB 到 C++:相当于带有选项 'remove' 的 bwmorph
- MATLAB的imfinfo in openCV
- 将C++中的多个参数传递给MatLab共享库函数
- 将 matlab 数组(MAT-文件)转换为C++数组