Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2628. MISRA. The pointer arguments...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2628. MISRA. The pointer arguments to the Standard Library functions memcpy, memmove and memcmp should be pointers to qualified or unqualified versions of compatible types.

07 Фев 2025

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Это правило актуально только для C.

Передача в функции memcpy, memmove и memcmp аргументов-указателей на разные, несовместимые между собой типы может сигнализировать об ошибке.

Рассмотрим пример кода:

void foo(int s1[CMP_SIZE], float s2[CMP_SIZE])
{
  memcpy(s1, s2, CMP_SIZE * sizeof(int));
}

В этом примере аргументы функции memcpy имеют разные типы: s1int *, а s2float *. Примечание: несмотря на то, что параметры s1 и s2 задекларированы как массивы, в силу специфики языка C на самом деле они являются указателями.

Корректный код выглядит так:

void foo(int s1[CMP_SIZE], int s2[CMP_SIZE])
{
  memcpy(s1, s2, CMP_SIZE * sizeof(int)); 
}

Данная диагностика классифицируется как:

  • MISRA-C-2023-21.15