[C con Clase] no puedo usar una funcion mas de 2 veces sino explota el programa

Jadder Antonio Moya Urbáez jadder.antonio en gmail.com
Dom Mar 13 06:41:23 CET 2011


hola a todos tengo un problema, estoy haciendo un programa y tengo una funcion
pero si esa funcion la utilizo mas de 2 veces me explota el programa,
y no es una funcion recursiva.

1-ejecuten el programa y funciona
2- descomenten cualquiera de las dos llamada a la funcion o ambas, que
estan al final del main
   //conversion(millones);
   //conversion(miles);
el programa funciona siempre y cuando dejen solamente 2 fucniones
no entiendo por que revienta el programa con mas llamada a la misma funcion.

aqui les dejo el codigo


#include <iostream>
#include <string.h>
#include <cstring>

using namespace std;
string conversion(string);

main(){
    int longitud =0;
    char *monto = new char [13];
    string cadena, temporal;
    string cientos, miles, millones, centavos;

    cout << "Digite su monto: ";
    cin >> monto;
    cadena = monto;
    longitud = strlen(monto);

    if(longitud<12){ //creo una cadena temporal rellenando con los
valores que faltan
        for(int x=0;x<(12-longitud);x++){
            temporal+= '0';
        }
    }
    temporal += monto;  //suma la cadena monto a la temporal
    cout << temporal << endl;

    //cout << monto << endl;
   // cout << longitud << endl;

    millones = temporal.substr(0,3);
    miles = temporal.substr(3,3);
    cientos = temporal.substr(6,3);
    centavos = temporal.substr(9);

    cout << endl;
    //conversion(millones);
    //cout << "Millones ";

    //conversion(miles);
    //cout << "Mil " << endl;

    conversion(cientos);
    conversion(centavos);
    cout << "Centavos. ";

    cout<< endl;
}

string conversion(string numero){
    //cout << "aqui: " << numero << endl;
    bool c = true;
    char *cant = new char [4];
    for(int x=0;x<=2;x++){      //creo este bucle para convertir de
string a char
        cant[x] =  numero[x];   // y ponder usar un swithc que trabaja
con constantes
    }

    switch(cant[0]){
        case '9':   cout << "Novecientos ";     c=true;    break;
        case '8':   cout << "Ochocientos ";     c=true;    break;
        case '7':   cout << "Setecientos ";     c=true;    break;
        case '6':   cout << "Seiscientos ";     c=true;    break;
        case '5':   cout << "Quinientos ";      c=true;    break;
        case '4':   cout << "Cuatrocientos ";   c=true;    break;
        case '3':   cout << "Trecientos ";      c=true;    break;
        case '2':   cout << "Docientos ";       c=true;    break;
        case '1':   cout << "Ciento ";          c=true;    break;
        case '0':   cout << "";                 c=true;    break;
        case '.':   cout << "con ";             c=true;    break;

        default:
        cout <<"defaul1 " ;
        c=true;    break;
    }


    switch(cant[1]){
        case '9':   cout << "Noventa ";         c=true;    break;
        case '8':   cout << "Ochenta ";         c=true;    break;
        case '7':   cout << "Setenta ";         c=true;    break;
        case '6':   cout << "Sesenta ";         c=true;    break;
        case '5':   cout << "Cincuenta ";       c=true;    break;
        case '4':   cout << "Cuarenta ";        c=true;    break;
        case '3':   cout << "Trenta ";          c=true;    break;
        case '2':   cout << "Veinte ";          c=true;    break;
        case '1':   cout << "Novecientos ";     c=true;    break;
        case '0':   cout << "";                 c=true;    break;

        default:
        cout <<"defaul2 " ;
        c=true;    break;
    }

    if(c == true){
        cout << "y ";
        c = false;
    }


    switch(cant[2]){
        case '9':   cout << "Nueve ";           c=true;    break;
        case '8':   cout << "Ocho ";            c=true;    break;
        case '7':   cout << "Siete ";           c=true;    break;
        case '6':   cout << "Seis ";            c=true;    break;
        case '5':   cout << "Cinco ";           c=true;    break;
        case '4':   cout << "Cuatro ";          c=true;    break;
        case '3':   cout << "Tres ";            c=true;    break;
        case '2':   cout << "Dos ";             c=true;    break;
        case '1':   cout << "Uno ";             c=true;    break;
        case '0':   cout << "";                 c=true;    break;

        default:
                cout <<"defaul " << endl;
        c=true;    break;
    }
    cant = "";

}




Más información sobre la lista de distribución Cconclase