Cuelgue de programa no se por que

Iniciado por Xedrox, 23 Diciembre 2012, 23:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Xedrox

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;
}

$Edu$

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.

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language