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* указатель. 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
Удар: носитель
ID CWE: 135, 704, 843
Введенный в R2013b