Я пишу функцию S, которая выводит массив логических (4 позиции)
У меня нарушение прав доступа к памяти при записи выходных данных внутри обратного вызова mdlOutputs.
Эта ошибка не является мгновенной. Я имею в виду: код работает нормально до тех пор, пока не сработает, а Matlab выдаст фатальную ошибку Я почти уверен, что ошибка в операции memcpy, потому что я отладил, и после того, как я прокомментировал эту строку кода, она работает нормально. Кроме того, он работает на 100% нормально, если тип данных является скалярным.
Итак, у меня есть пара вопросов:
Псевдокод здесь:
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
}
Задача ещё не решена.
Других решений пока нет …