# V548. TYPE X[][] is not equivalent to TYPE **X. Consider inspecting type casting.

Анализатор обнаружил потенциально возможную ошибку, связанную с явным приведением типа. В программе массив, объявленный условно как "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
    }

Данная диагностика классифицируется как:

CWE-704 CERT-EXP36-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V548.