Unreliable cast of pointer

Указатель неявно приведен к различным типам данных

Описание

Этот дефект возникает, когда указатель неявно приведен к типу данных, отличному от его типа объявления. Такое неявное литье может иметь место, например, когда указатель на тип данных char присваивается адрес целого числа.

Этот дефект применяется только в том случае, если языком кода для проекта является C.

Риск

Приведение указателя на тип данных, отличный от его типа объявления, может привести к таким проблемам, как переполнение буфера. Если приведение неявное, это может указать на ошибку кодирования.

Зафиксировать

Избегайте неявного приведения указателя на тип данных, отличный от его типа объявления.

См. примеры исправлений ниже.

Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

Примеры

расширить все

 #include <string.h>
 
 void Copy_Integer_To_String()
 {
  int src[]={1,2,3,4,5,6,7,8,9,10};
  char buffer[]="Buffer_Text";
  strcpy(buffer,src);   
  /* Defect: Implicit cast of (int*) to (char*) */
 }

src объявлен как int* указатель. The strcpy оператор, при копировании в buffer, неявно отбрасывает src на char*.

Коррекция - Избегайте приведения указателя

Одной из возможных коррекций является объявление указателя мыши src с совпадающим типом данных, что и buffer.

 #include <string.h>
  void Copy_Integer_To_String()
 {
  /* Fix: Declare src with same type as buffer */
  char *src[10]={"1","2","3","4","5","6","7","8","9","10"};  
  char *buffer[10];

  for(int i=0;i<10;i++)
    buffer[i]="Buffer_Text";

  for(int i=0;i<10;i++)
    buffer[i]= src[i];
  }

Информация о результатах

Группа: Статическая память
Язык: C
По умолчанию: On
Синтаксис командной строки: PTR_CAST
Влияние: Средний
ИДЕНТИФИКАТОР CWE: 135, 704, 843
Введенный в R2013b