Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Xedrox en 23 Diciembre 2012, 23:02 PM

Título: Cuelgue de programa no se por que
Publicado por: Xedrox en 23 Diciembre 2012, 23:02 PM
Buenas tengo el siguiente programa que abre un archivo de texto, lee las lineas y las parsea para mostrarlas por consolas, pero cuando termino de mostrarlas todas se cuelga el programa, tienen idea que puede ser? Muchas Gracias, saludos!


#include<iostream>
#include<string>
#include<fstream>
#include <sstream>

using namespace std; //evita que escriba el nombre del paquete std para cada funcion ej: std::cout...

int main()
{
   
    struct transaccion
    {
         string campo1;
         string campo2;
         string campo3;
         string campo4;
    };
   
    struct transaccion trx;
   
    ifstream input;
    input.open("Transacciones.txt",ios::in);
    char buffer[250];
   
     
    while(!input.eof())
    {
        char *auxSplit;
       
        input.getline(buffer,250);
       
        auxSplit = strtok(buffer,";"); /* Separador ";" */
        trx.campo1 = auxSplit;
        cout << trx.campo1 << "\n";
       
        auxSplit = strtok (NULL, ";");
        trx.campo2 = auxSplit;
        cout << trx.campo2 << "\n";
        auxSplit = strtok (NULL, ";");
       
        trx.campo3 = auxSplit;
        cout << trx.campo3 << "\n";
        auxSplit = strtok (NULL, ";");
       
        trx.campo4 = auxSplit;
        cout << trx.campo4 << "\n";
       
        delete(auxSplit);
    }
   
    input.close();
    return 0;
}
Título: Re: Cuelgue de programa no se por que
Publicado por: $Edu$ en 24 Diciembre 2012, 00:27 AM
Tienes la posibilidad de ir debuggeando el programa? si es asi hacelo, para ir paso a paso viendo como ejecuta cada linea y ver cuando se genera el problema, por ejemplo, podria ser que ese bucle While no termine nunca y por eso se cuelga, pero eso te darias cuenta si debuggeas linea por linea, fijate que no es muy largo tu codigo, asi que encontraras el error facilmente.
Título: Re: Cuelgue de programa no se por que
Publicado por: rir3760 en 24 Diciembre 2012, 02:00 AM
Si apenas estas empezando con el lenguaje C++ no necesitas de un depurador, primero porque aun cuando este te indique donde esta el problema difícilmente vas a solucionarlo si no manejas bien el lenguaje (por definición es el caso) y segundo mientras menos variables en lo que concierne a tu aprendizaje mejor.

Los errores en el programa son dos: utilizar eof para verificar si se alcanzo el final del archivo y, por alguna extraña razón, tratas de liberar la memoria apuntada por el puntero (solo debes liberar la memoria reservada con new).

Con los cambios:
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
   struct transaccion {
      string campo1;
      string campo2;
      string campo3;
      string campo4;
   };
   struct transaccion trx;
   
   ifstream input;
   input.open("Transacciones.txt", ios::in);
   char buffer[250];
   
   while (input.getline(buffer, 250)){
      char *auxSplit;
     
      auxSplit = strtok(buffer, ";");
      trx.campo1 = auxSplit;
      cout << trx.campo1 << "\n";
     
      auxSplit = strtok(NULL, ";");
      trx.campo2 = auxSplit;
      cout << trx.campo2 << "\n";
     
      auxSplit = strtok(NULL, ";");
      trx.campo3 = auxSplit;
      cout << trx.campo3 << "\n";
     
      auxSplit = strtok(NULL, ";");
      trx.campo4 = auxSplit;
      cout << trx.campo4 << "\n";
   }
   input.close();
   
   return 0;
}


Un saludo