Primero un comentario para definir un array de 8x16 tienes que hacer
Y si el segundo indice corresponde a una cadena de caracteres tienes que hacer espacio para el caracter nulo que indica el fin de la cadena. entonces deberia ser
Para hacer reserva dinamica se utilizan los operadores new y delete [];
Primero se declara un puntero a puntero para poder inicializar un array bidimensional.
si words es el numero de palabras se uza el operador new para crear un array de cadenas de longitud words.
luego para cada palabra se define una cadena de longitud 16
Código c++:
Ver originalfor(int i=0;i<words;i++) cadena[i]=new char[17];
Todo junto seria:
Código c++:
Ver originalchar **cadena;
cadena=new char *[words];
for(int i=0;i<words;i++) cadena[i]=new char[17];
Y cuando terminas de usar la cadena no tenes que olvidarte de liberar la memoria utilizada.
Código c++:
Ver originalfor(int i=0;i<words;i++) delete [] cadena[i];
delete [] cadena;
Espero que te sirva