Нарушение функции памяти

Я пишу функцию S, которая выводит массив логических (4 позиции)

У меня нарушение прав доступа к памяти при записи выходных данных внутри обратного вызова mdlOutputs.

Эта ошибка не является мгновенной. Я имею в виду: код работает нормально до тех пор, пока не сработает, а Matlab выдаст фатальную ошибку Я почти уверен, что ошибка в операции memcpy, потому что я отладил, и после того, как я прокомментировал эту строку кода, она работает нормально. Кроме того, он работает на 100% нормально, если тип данных является скалярным.

Итак, у меня есть пара вопросов:

  1. Как я могу использовать memcpy для записи значений массива в Simulink?
  2. Я предположил, что выходная память simulink является непрерывным блоком памяти. Это правильно?
  3. Есть подсказки, как это решить?

Псевдокод здесь:

static void mdlOutputs ( SimStruct* S, int_T tid ) {
(...)
//src variable defined here
(...)

void* dst;

// get output port data type id
type = ssGetOutputPortDataType ( S, i );  // type = SS_BOOLEAN

// get data type size
size = ssGetDataTypeSize ( S, type );   //size = 1 byte

// get output port signal pointer
dst = ( void* ) ssGetOutputPortSignal ( S, i );  //dst has a valid value

// get output port width
width = ssGetOutputPortWidth ( S, i );  //width is 4, since it is a 4 position array

size = size * width; // size now is 4

memcpy ( dst, src, size );     // Error
}

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]