Muchas gracias por la ayuda. He conseguido realizar el programa de ambas maneras, con la versión de puntero a puntero de arrays de punteros y la versión con estructuras<br><br>Escribo el códgio de la versión 2 por si a alguien le sirviese de ayuda<br>
#include <stdio.h><br>#include <stdlib.h><br>#include <string.h><br><br>typedef struct st_palabra<br>{<br> char *pszPalabra;  /* Cadena dinámicamente adjudicada */<br> int nHomologa;  /* Índice a la palabra traducida y asociada a ésta */<br>
} palabra;<br><br>typedef struct st_diccionario<br>{<br> palabra *pLista;                   /* Contendrá el array de estructuras con las palabras escritas */<br> unsigned long int nCantidad;       /* Tamaño del diccionario */<br>
} diccionario;<br><br>/**** Prototipos de las funciones ****/<br>void crearDiccionario (diccionario *, diccionario* );<br>void traducir (diccionario, diccionario, char*);<br><br>void main(void)<br>{<br>    char bqda[40];         /* Para almacenar la palabra */<br>
<br>    diccionario ingles, espanhol;<br><br>    /* Se inicializan los punteros */<br>    ingles.pLista = NULL;<br>    espanhol.pLista = NULL;<br>    ingles.nCantidad = 0;<br>    espanhol.nCantidad = 0;<br><br><br>    crearDiccionario (&ingles, &espanhol);      /* Se pasan las estructuras por referencia para que las modificaciones se guarden */<br>
<br>    printf("\nPara buscar una traducción introduce una palabra a buscar, para finalizar pulsa <Enter> o EOF\n");<br>    do<br>    {<br>        printf("Introduce palabra: ");<br>        fgets(bqda, 40, stdin);<br>
        bqda[strlen(bqda) - 1] = '\0';<br><br>        if (bqda[0] != '\0')<br>            traducir(ingles, espanhol, bqda);<br>    }<br>    while (bqda[0] != '\0');<br><br><br><br><br>}<br><br>void crearDiccionario (diccionario *ing, diccionario *esp)<br>
{<br>    char pesp[40], ping[40];        /* Cadenas temporales para almacenar las palabras introducidas */<br>    int longitud;                   /* Variable para reajustar el resultado de fgets */<br>    int i = 0;                      /* Indice para bucle while */<br>
<br>    /* Preguntamos al usuario para que introduzca las parejas de palabras */<br>    printf("\nIntroduce las parejas de palabras\n");<br>    do<br>    {<br>        printf ("Introduce la palabra inglesa: ");<br>
        fgets(ping, 40, stdin);<br>        printf ("Introduce la palabra española: ");<br>        fgets (pesp, 40, stdin);<br><br>        /* Ajustamos las cadenas para eliminar el carácter '\n' */<br>        longitud = strlen(ping);<br>
        ping[longitud-1] = '\0';<br>        longitud = strlen(pesp);<br>        pesp[longitud-1] = '\0';<br><br>        if (ping[0] != 0 && pesp[0] != 0)       /* Si hay una pareja válida en ping y pesp ejecuta el código de asginación */<br>
        {<br>            /* Aumenta los contadores de tamaño de cada estructura */<br>            ing->nCantidad++;<br>            esp->nCantidad++;<br><br><br>            /* Se crea espacio para el nuevo elemento en cada diccionario */<br>
            ing->pLista = (palabra*)realloc (ing->pLista, ing->nCantidad * sizeof(palabra));<br>            esp->pLista = (palabra*)realloc (esp->pLista, esp->nCantidad * sizeof(palabra));<br><br>            /* Se crea espacio para cada cadena de caracteres */<br>
            ing->pLista[i].pszPalabra = (char*)realloc (ing->pLista[i].pszPalabra, (strlen(ping)+1)); /* Se suma uno a strlen(ping) para incluir el carácter nulo */<br>            esp->pLista[i].pszPalabra = (char*)realloc (esp->pLista[i].pszPalabra, (strlen(pesp)+1));<br>
<br>            /* Se copian los valores temporales (ping, pesp) a los definitivos */<br>            strcpy (ing->pLista[i].pszPalabra, ping);<br>            strcpy (esp->pLista[i].pszPalabra, pesp);<br><br>            /* Se asignan los índices de las homologas */<br>
            ing->pLista[i].nHomologa = i;<br>            esp->pLista[i].nHomologa = i;<br>            i++;<br>        }<br><br>    }<br>    while(i < 100 && ping[0] != 0 && pesp[0] != 0);<br>}<br>
<br>void traducir (diccionario ing, diccionario esp, char* obj)<br>{<br>    int i = 0;      /* Indice */<br><br>    while (i < ing.nCantidad && strcmp(ing.pLista[i].pszPalabra, obj))i++;<br><br>    if (i < ing.nCantidad)<br>
        printf("La traducción de %s es %s\n", obj, esp.pLista[i].pszPalabra);<br>    else<br>        printf ("Palabra no encontrada\n");<br>}<br><br>La version 1 funciono simplemente con la modificación propuesta<br>
     >*ing = (char**)realloc(*ing, tam * sizeof (char*));<br><div class="im">     >
*esp = (char**)realloc(*esp, tam * sizeof (char*));<br></div>     >
(*ing)[tam-1] = (char*)realloc((*ing)[tam-1], strlen(palai)+1);<br>

     >(*esp)[tam-1] = (char*)realloc((*esp)[tam-1], strlen(palae)+1);<br><br>Un saludo y nuevamente gracias<br>Xan.<br><br>-- <br>Una vez le preguntaron al Buda que es lo que a él más le sorprendía de la humanidad. El Buda respondió: "Los hombres, que pierden la salud para juntar dinero, y luego pierden el dinero para recuperarla y que por pensar ansiosamente en el futuro olvidan el presente de tal forma, que acaban por no vivir ni el presente ni el futuro. Viven como si nunca fuesen a morir, y mueren como si nunca hubiesen vivido".<br>
<br>