簡體   English   中英

C結構中的分段錯誤。 使用Matlab Coder從Matlab-> C轉換的代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM