Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

[C/C++] Por que me sale este mensaje en Visual Studio 2008?

Participa en el tema [C/C++] Por que me sale este mensaje en Visual Studio 2008? en el foro Programación.
Hola a todos, estoy haciendo un programa en c++ en Visual Studio 2008. Al compilar ...

Buscar en este tema:
 
  •  
    #1 [C/C++] Por que me sale este mensaje en Visual Studio 2008?
    Hola a todos, estoy haciendo un programa en c++ en Visual Studio 2008. Al compilar mi codigo todo esta bien pero cuando lo ejecuto me sale el siguiente cuadro de mensaje:



    Todo esto por que estoy usando el operador dinámico "new" en mi código, alguien me puede decir que es esto y como le puedo hacer para que se ejecute mi programa?

    Saludos
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/754708-c-c-que-me-sale-este.html
    | Más
  • #2 Re: Por que me sale este mensaje en Visual Studio 2008?

    El error está en la línea 214. Pusiste = en vez de ==.

    Saludos.
    Me gusta este mensaje
  • #3 Re: Por que me sale este mensaje en Visual Studio 2008?

    Originalmente publicado por pangus Ver mensaje
    El error está en la línea 214. Pusiste = en vez de ==.

    Saludos.
    Sos mi ídolo
    Me gusta este mensaje
  • #4 Re: Por que me sale este mensaje en Visual Studio 2008?

    mmmm ni siquiera tengo linea 214, ademas no creo que por eso halla error, miren les posteo el codigo para que lo analicen:

    Código:
    #include <iostream>
    
    using namespace std;
    
    #include <cstring>
    #include <new>
    
    class cascada
    {
    public:
        cascada ( const char * = "Andres", const char * = "33332112", const char * = "andrestoga@gmail.com"  );
        ~cascada ();
        cascada &EstNomb ( const char * );
        cascada &EstTel ( const char * );
        cascada &EstMail ( const char * );
        void imprimir();
    
    private:
        char *nombre;
        char *telefono;
        char *email;
    };
    
    cascada::cascada( const char *nom, const char *tel, const char *em )
    {
    
      nombre = new char [ strlen(a) + 1 ];
        strcpy( nombre, nom );
    
    telefono = new char [ strlen(a) + 1 ];
        strcpy( telefono, tel );
    
     email = new char [ strlen(a) + 1 ];
        strcpy( email, em );
    
    }
    
    cascada::~cascada()
    {
        delete [] nombre;
        delete [] telefono;
        delete [] email;
    
    }
    
    cascada &cascada::EstNomb(const char *a)
    {
        strcpy( nombre, a );
    
        return *this;
    }
    
    cascada &cascada::EstTel(const char *a)
    {    
        strcpy( telefono, a );
    
        return *this;
    }
    
    cascada &cascada::EstMail(const char *a)
    {     
        strcpy( email, a );
    
        return *this;
    }
    
    void cascada::imprimir()
    {
    
    cout << nombre << "\n" << telefono << "\n" << email << endl;
    
    }
    
    int main ()
    {
    
    cascada persona;
    
    persona.imprimir();
    
    persona.EstNomb( "Bernardo" ).EstTel ( "32800066" ).EstMail ( "berna@gmail.com" ).imprimir ();
    
    
        return 0;
    }
    
    Saludos
    Editado por jaquense - 17.06.2008 18:59 hs. | Motivo: Correción del error de los new en el constructor
    Me gusta este mensaje
  • #5 Re: Por que me sale este mensaje en Visual Studio 2008?

    Faltan algunos new en el constructor. Saludos.

    (PD: por otro lado, faltan un par de delete en los EstXxx.)
    Me gusta este mensaje
  • #6 Re: Por que me sale este mensaje en Visual Studio 2008?

    Originalmente publicado por pangus Ver mensaje
    El error está en la línea 214. Pusiste = en vez de ==.

    Saludos.
    Yo pensé que estaba en la 213 :S
    Me gusta este mensaje
  • #7 Re: Por que me sale este mensaje en Visual Studio 2008?

    Originalmente publicado por pangus Ver mensaje
    Faltan algunos new en el constructor. Saludos.

    (PD: por otro lado, faltan un par de delete en los EstXxx.)
    En los EstXxx?

    Bueno, ya puse los new en el constructor y ahora me aparece la siguiente ventana:



    Ahora que tengo mal?

    Corrijo el error que tenia el codigo con respecto a los new en los constructores en el codigo que postie.

    Saludos
    Me gusta este mensaje
  • #8 Re: Por que me sale este mensaje en Visual Studio 2008?

    Cortando y pegando sin pensar no vas a llegar muy lejos.
    Editado por pangus - 17.06.2008 19:08 hs. | Motivo: No fue ^C, fue ^X (!)
    Me gusta este mensaje
  • #9 Re: Por que me sale este mensaje en Visual Studio 2008?

    1. Te conviene inicializar todos los miembros antes de la primera línea del constructor.
    2. Tus métodos EstXXXXX() pisan memoria si les pasás una cadena de mayor longitud que la original (la que se le pasó al constructor). Por ejemplo si lo construís con un nombre de tres letras, crea un array de cuatro bytes y guarda el puntero en nombre. Luego, si llamás EstNombre("Al diablo con la memoria"); todos los caracteres desde la i en adelante pisan memoria.
    3. La función strlen() tiene comportamiento indeterminado (explota) si le pasás un puntero NULL, por lo que siempre tenés que verificar que lo recibido no sea NULL.
    Código:
    #include <iostream>
    
    using namespace std;
    
    #include <cstring>
    
    class cascada
    {
    public:
        cascada( const char * = "Andres", const char * = "33332112", const char * = "andrestoga@gmail.com"  );
        ~cascada ();
        cascada & EstNomb ( const char * );
        cascada & EstTel ( const char * );
        cascada & EstMail ( const char * );
        void imprimir();
    
    private:
        char *nombre;
        char *telefono;
        char *email;
    };
    
    cascada::cascada( const char *nom, const char *tel, const char *em ) : nombre(NULL), telefono(NULL), email(NULL)
    {
      EstNomb(nom);
      EstTel(tel);
      EstMail(em);
    }
    
    cascada::~cascada()
    {
      if (nombre)
        delete [] nombre;
      if (telefono)
        delete [] telefono;
      if (email)
        delete [] email;
    
    }
    
    cascada &cascada::EstNomb(const char *nom)
    {
      if (nom) {
        if (nombre)
          delete [] nombre;
        nombre = new char [ strlen(nom) + 1 ];
        strcpy( nombre, nom );
      }
        return *this;
    }
    
    cascada &cascada::EstTel(const char *tel)
    {    
      if (tel) {
        if (telefono)
          delete [] telefono;
        telefono = new char [ strlen(tel) + 1 ];
        strcpy( telefono, tel );
      }
      
        return *this;
    }
    
    cascada &cascada::EstMail(const char *em)
    {     
      if (em) {
        if (email)
          delete [] email;
        email = new char [ strlen(em) + 1 ];
        strcpy( email, em );
      }
        return *this;
    }
    
    void cascada::imprimir()
    {
    
    cout << nombre << endl << telefono << endl << email << endl;
    
    }
    
    int main (int argc, char ** argv)
    {
    
      cascada persona;
    
      persona.imprimir();
    
      persona .EstNomb("Bernardo")
              .EstTel("32800066")
              .EstMail("berna@gmail.com")
              .imprimir();
    
    
        return 0;
    }
    
    Me gusta este mensaje
  • #10 Re: Por que me sale este mensaje en Visual Studio 2008?

    Originalmente publicado por pangus Ver mensaje
    Cortando y pegando sin pensar no vas a llegar muy lejos.
    Lo tomare en cuenta gracias

    DRK, con respecto a tu codigo, perdon si es algo de novatos pero es lo que soy, que significa esta condición y sus derivados en un apuntador a una cadena de caracteres "if (nom)" ?, bueno lo que yo entiendo es que si no apunta a nulo es verdadero, es asi?.

    Pero entonces si es como digo, ¿Cuando un apuntador a una cadena de caracteres va a ser nulo?, por ejemplo en este programa.

    Saludos y gracias por tus consejos y solución.
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 9 RESPUESTAS
  • 673 VISTAS
  • 4 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB