Gracias por la corrección. Entiendo lo que ha provocado el error, y la conveniencia de pasar el puntero como argumento de la función. Pero hay algunas cosas que no termino de entender en el diseño típico:<br><br>        char * DectoBase( TIPO1 numdec, TIPO2 base, char *numbase )
<br>        {<br>           // ¿Puntero nulo?<br>           if( !numbase )  return 0;<br>           ...<br>           return numbase;<br>        }<br><br>Empezando por la declaración de la función ¿qué necesidad hay de que retorne el mismo puntero que se pasa como parámetro? 
<br>Tampoco tengo muy claro la utilidad de if(!numbase) return 0; aunque he hecho la siguiente interpretación:<br><br><br>#include <iostream><br>using namespace std;<br>typedef unsigned long long int ULLINT;<br>typedef unsigned short int USINT;
<br><br>const char DIGITOS[16] = {'0', '1', '2', '3', '4', '5', '6', '7',<br>                        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
<br><br>void DectoBase(ULLINT numdec, USINT base, char *numbase);<br>ULLINT Pot(USINT base, USINT exponente);<br><br>int main()<br>{<br>    ULLINT numdec;<br>    USINT base, nDig, nCant;<br>    char *numbase;<br>    numbase = NULL;
<br>    <br>    cout << "\n Numero, base: ";<br>    cin >> numdec >> base;<br>    <br>    if(base >= 2 && base <= 16) nCant = 0;<br>    {<br>        /* Calcula el número de dígitos de numdec: */
<br>        nDig = 0;<br>        while( numdec/Pot(10,nDig) >= 1) nDig++;<br>        /* Reserva la memoria necesaria: */<br>        if(base >= 10) nCant = nDig + 1;<br>        else nCant = nDig * (8 / base) + 2;        // una mala aproximación
<br>        numbase = new char[nCant];<br>    }<br>    <br>    DectoBase(numdec, base, numbase, nCant);<br>    if(numbase) cout << "\n " << numbase << endl;<br>    else cout << "\n error" << endl;
<br>    <br>    delete[] numbase;<br>    <br>    cin.get();cin.get();<br>    return 0;<br>}<br><br>void DectoBase(ULLINT numdec, USINT base, char *numbase)<br>{<br>    if(!numbase) return;<br>    <br>    USINT resto;<br>    USINT i = 0, j;
<br>    char aux;<br><br>    while(numdec >= base)<br>    {<br>        resto = numdec % base;<br>        numbase[i] = DIGITOS[resto];<br>        numdec /= base;<br>        i++;<br>    }<br>    numbase[i] = DIGITOS[numdec];
<br>    numbase[i+1] = 0;<br>    /* Invierte la cadena: */<br>    for( j = 0; j <= i/2; j++ )<br>    {<br>        aux = numbase[j];<br>        numbase[j] = numbase[i-j];<br>        numbase[i-j] = aux;<br>    }<br>}<br>
<br>ULLINT Pot(USINT base, USINT exponente)<br>{<br>    ULLINT valor = 1;<br>    USINT i;<br>    <br>    if(!exponente) return 1;<br>    for( i = 1; i <= exponente; i++ ) valor *= base;<br>    return valor;<br>}<br><br>
<br>y para terminar (lamento mi torpeza) tampoco logro entender la utilidad del parámetro nCant en el segundo caso.<br>