Funziona.
Ho apportato le seguenti modifiche:
struct comp *p = (struct comp*)malloc(sizeof(struct comp));
    if(!p)
    {
        //
    }
    struct comp **pv = 0;
    struct comp ***point;
    int s;
    for(p = comps, s = 1; p; p = p->n, s++)
    {
        unsigned int i = 0;
        for(; name[i] != p->name[i]; i++);
        if(p && name[i] == p->name[i])
        {
            unsigned int a = 1;
            for(; name[i + a] == p->name[i + a]; a++);
            if(a == strlen(name))
            {
                pv = (struct comp **) realloc(pv, sizeof(struct   comp*) * (s + 1));
                if(!pv)
                {
                    goto ret;
                }
                point = &pv;
                pv[s] = p;
            }
            continue;
        }
    }
    pv[0]->code = s; // l'elemento 0 funge da contatore degli elementi totali
ret:                        
    return point;
}
Se volessi che la funzione restituisse questo vettore di strutture, in modo da poterlo utilizzare nella funzione principale, quali modifiche dovrei apllicare al codice?