Ненадежный бросок указателя

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

Описание

Ненадежный бросок указателя происходит, когда указатель неявно брошен к типу данных, отличающемуся от его типа объявления. Такой неявный кастинг может пройти, например, когда указатель на тип данных 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
Значение по умолчанию: на
Синтаксис командной строки: PTR_CAST
Влияние: носитель
ID CWE: 135, 704, 843

Введенный в R2013b