Si a la funcion le paso una referencia a lista, el prototipo no seria
void fnc(char*** lista); ????
Si, ahora mismo si inicializas lista a 0 y depuras vas a ver que lista sigue siendo 0.
entonces...
quedamos de acuerdo en que
char** lista;
lista = (char**)malloc( sizeof(char*)*5); // reservo espacio para 5 strings
lista = (char*)malloc( sizeof(char)*10); // reservo 10 bytes para 1 de los 5 strings
Si.
ahora, para copiar 1 cadena, es corecto?:
strcpy(lista[i], "mi cadena");
Tambien.
pensa que todo el tema de asignacion de memoria y strings se hace dentro de la funcion, no en el main.
Si, ya lo hice funcionar tanto en C (char*** como en C++ **&).