exponenta event banner

Ненадежная отливка указателя

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

Описание

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

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

Риск

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

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

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

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

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

Примеры

развернуть все

 #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
Воздействие: среднее
CWE ID: 135, 704, 843
Представлен в R2013b