I am aligning several arrays in order and performing some sort of classification. I created an array to hold other arrays in order to simplify the operations that I want to perform.
Sadly, my program crashed when I ran it and I went on to debug it to finally realize that the sizeof operator is giving me sizes of pointers and not arrays within the loop.So I resorted to the cumbersome solution and my program worked.
How can I avoid this cumbersome method? I want to calculate within a loop!
#include <iostream>
#include <string>
#define ARRSIZE(X) sizeof(X) / sizeof(*X)
int classify(const char *asset, const char ***T, size_t T_size, size_t *index);
int main(void)
{
    const char *names[] = { "book","resources","vehicles","buildings" };
    const char *books[] = { "A","B","C","D" };
    const char *resources[] = { "E","F","G" };
    const char *vehicles[] = { "H","I","J","K","L","M" };
    const char *buildings[] = { "N","O","P","Q","R","S","T","U","V" };
    const char **T[] = { books,resources,vehicles,buildings };
    size_t T_size = sizeof(T) / sizeof(*T);
    size_t n, *index = new size_t[T_size];
    /* This will yeild the size of pointers not arrays...
        for (n = 0; n < T_size; n++) {
            index[n] = ARRSIZE(T[n]);
        }
    */
    /* Cumbersome solution */
    index[0] = ARRSIZE(books);
    index[1] = ARRSIZE(resources);
    index[2] = ARRSIZE(vehicles);
    index[3] = ARRSIZE(buildings);
    const char asset[] = "L";
    int i = classify(asset, T, T_size, index);
    if (i < 0) {
        printf("asset is alien !!!\n");
    }
    else {
        printf("asset ---> %s\n", names[i]);
    }
    delete index;
    return 0;
}
int classify(const char *asset, const char ***T, size_t T_size, size_t *index)
{
    size_t x, y;
    for (x = 0; x < T_size; x++) {
        for (y = 0; y < index[x]; y++) {
            if (strcmp(asset, T[x][y]) == 0) {
                return x;
            }
        }
    }
    return -1;
}
 
     
    