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

The analyzer detected a potential error related to an explicit type conversion. An array defined as "type Array[3][4]" is cast to type "type **". This type conversion is most likely to be meaningless.

Types "type[a][b]" and "type **" are different data structures. Type[a][b] is a single memory area that you can handle as a two-dimensional array. Type ** is an array of pointers referring to some memory areas.

Here is an example:

    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
    }

This is the correct code:

    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
    }

This diagnostic is classified as:

CWE-704 CERT-EXP36-C

You can look at examples of errors detected by the V548 diagnostic.