[英]C Segmentation fault in struct. Code translated from Matlab->C with Matlab Coder
我正在使用Matlab Coder將某些Matlab函數轉換為C。 一切正常,直到我想從我的函數返回一個數組(轉置向量)。
在Matlab中,我有一個功能:
function returnedArray = myFun(input arguments)
<function code>
C語言中對函數的此調用轉換為:
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);
當我運行此命令時,我收到一條錯誤消息:細分錯誤。 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
我的主要功能有問題嗎? 我希望如此,因為從Matlab中用C語言翻譯的代碼是一團糟,或者僅僅是對我來說是新手。 如果我使用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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.