Анализатор обнаружил потенциально возможную ошибку, связанную с явным приведением типа. В программе массив, объявленный условно как "type Array[3][4]", приводится к типу "type **". Это приведение типа, скорее всего, не имеет смысла.
Типы "type[a][b]" и "type **" представляют собой разные структуры данных. Type[a][b] это единый участок памяти с которым можно работать как с двумерным массивом. Type ** - это массив указателей на какие-то участки памяти.
Пример:
void Foo(char **names, size_t count) { for(size_t i=0; i<count; i++) printf("%s\n", names[i]); } void Foo2() { char names[32][32]; ... Foo((char **)names, 32); //Crash }
Исправленный вариант:
void Foo2() { char names[32][32]; ... char *names_p[32]; for(size_t i=0; i<32; i++) names_p[i] = names[i]; Foo(names_p, 32); //OK }
Данная диагностика классифицируется как:
|
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V548. |