UTNianos

Versión completa: [C++]Problema con violación de segmento
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola, bueno la cosa me tira violación de segmento cuando cargo la chapa y ya ni idea que es...
Me deja poner un valor y ahí me salta la violación y me quede sin saber que hacerConfused

Ayudas?




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>

typedef struct CAMIONES{
char* marca;
char* modelo;
char* n_chapa;
int interno;
int cantidad_viajes;
}struct_camion;

class VEHICULO{
private:
char *Marca;
char *Modelo;
char *Numero_chapa;
int Anio_fabricacion;
public:
VEHICULO(){};
~VEHICULO();

void set_modelo(char *v_modelo);
void set_marca(char *v_marca);
void set_n_chapa(char *v_chapa);
void set_anio_fabricacion(int v_anio);

char* get_marca(void);
char* get_modelo(void);
char* get_n_chapa(void);
int get_anio_fabricacion(void);
};

class CAMION: public VEHICULO{
private:
unsigned int interno;
unsigned int cantidad_viajes;

public:
void set_camion(struct_camion *);
struct_camion* get_camion(void);
void mirar_todo(void);
CAMION(){};
~CAMION(){};
};

//DECLARO FUNCIONES DE CLASE VEHICULO.

//Seteo de objeto perteneciente a clase vehículo - SET

void VEHICULO::set_marca(char *v_marca){
int tamano;
tamano = strlen(v_marca);
Marca = new char[tamano+1];
strcpy(Marca,v_marca);
}

void VEHICULO::set_modelo(char *v_modelo){
int tamano;
tamano = strlen(v_modelo);
Modelo = new char[tamano+1];
strcpy(Modelo,v_modelo);
}

void VEHICULO::set_n_chapa(char *v_chapa){
int tamano;
tamano = strlen(v_chapa);
Numero_chapa = new char[tamano+1];
strcpy(Numero_chapa,v_chapa);
}

void VEHICULO::set_anio_fabricacion(int v_anio){
Anio_fabricacion = v_anio;
}

//Seteo de objeto perteneciente a clase vehículo - GET


char* VEHICULO:: get_marca(void){
return(Marca);
}

char* VEHICULO:: get_n_chapa(void){
return(Numero_chapa);
}
char* VEHICULO:: get_modelo(void){
return(Modelo);
}
int VEHICULO:: get_anio_fabricacion(void){
return(Anio_fabricacion);
}


VEHICULO:: ~VEHICULO(){
delete [] (Numero_chapa);
delete [] (Modelo);
delete [] (Marca);
}

// Funciones clase CAMION

void CAMION::set_camion(struct_camion *nuevo_camion){

set_marca(nuevo_camion->marca);
set_modelo(nuevo_camion->modelo);
set_n_chapa(nuevo_camion->n_chapa);
if((nuevo_camion->interno>=0)&&(nuevo_camion->interno<=9999)){
interno = nuevo_camion->interno;
}
cantidad_viajes = 0;
}

struct_camion* CAMION::get_camion(void){
struct_camion *aux;

aux->marca = get_marca();
aux->modelo = get_modelo();
aux->n_chapa = get_n_chapa();
aux->interno = interno;
aux->cantidad_viajes = cantidad_viajes;
return(aux);
}

void CAMION::mirar_todo(void){
cout<<"Marca: "<<get_marca() << "Modelo: "<<get_modelo() << "Chapa: "<<get_n_chapa() << "Interno: "<<interno<< "Cantidad de viajes: "<<cantidad_viajes <<endl;
}


int main (void){
struct_camion camion_nuevo;
int cant_camiones = 0;
CAMION camiones[2];
while(cant_camiones<2){
cout<<"Ingrese marca"<<endl;
cin>>camion_nuevo.marca;
cout<<"Ingrese modelo"<<endl;
cin>>camion_nuevo.modelo;
cout<<"Ingrese chapa: "<<endl;
cin>>camion_nuevo.n_chapa;
cout<<"Ingrese interno: "<<endl;
cin>>camion_nuevo.interno;
cout<<"Ingrese cantidad de viajes: "<<endl;
cin>>camion_nuevo.cantidad_viajes;
camiones[cant_camiones].set_camion(&camion_nuevo);
cant_camiones++;
}
cout<<"Ya cargue todos los camiones"<<endl;
for(int i=0;i<2;i++){
camiones[i].mirar_todo();
}
getchar();
return(0);
}




gracia!
En que linea te salta?
139
cout<<"Ingrese chapa: "<<endl;
140
cin>>camion_nuevo.n_chapa;


Cuando cargo chapa viola.
No estoy del todo seguro porque no toco C++ hace rato, pero tenes dos posibles errores.

1) El operador CIN no te hace automaticamente la reserva de memoria. Estas mandando todo le flujo a un char *
2) Esta no se si le estoy mandando fruta pero el CIN no trabaja solo con el tipo string y no con char *?
Como dice el muchacho n_chapa es un char * al que nos e le reservo memoria, al igual que todos los demas.

Comentario aparte, que raro usar char * en C++, si podes evitar usarlo y usar string o stringstream te recomiendo hacerlo.
Joya gracias, en el parcial me lo pusieron como que estaba bien, jajaja
que desastre.
Tenes que reservar memoria para el char* o usar string

Ups, conteste tarde =P
=P, no pasa nada=P
En el parcial lo puso como bien, claramente un desastre.
Gracias a los tres por contestar =)
No seas amarrete con el botoncito de gracias (?)

Off-topic:
Ahí está.-
URLs de referencia