Estoy creando un juego llamado quien es quien, una práctica de una carrera de la asignatura, que es mas o menos como el juego de mesa pero con unas variantes.
Os dejo el guión para que le podáis echarle un vistazo.
Código:
Bien si le echáis un vistazo mas o menos te dicen lo que quieren que hagamos yo ahora mismo voy por la parte del panel y sus personajes y me ha surgido un problema en un programa prueba que "supuestamente pinta los personajes" cosa que aun no hace ¬.¬. Pst no me dejan poner enlaces aun ¬.¬
Bueno pos el problema esta es que cuando yo le paso un fichero de configuración "con << en el Terminal de ubuntu” El programa me de tres tipos de errores diferentes.
El primero es un fallo de segmentación, el segundo se queda bloqueado y el tercero pinta algo pero al finalizar el programa da un fallo de memo.
Según he podido indagar por el ddd resulta que no almacena los rasgos del los personajes 4,10 y 14 y seguro que es la causa. El problema es el código no tiene nada anormal (o no se lo veo por el ddd).
Os adjunto la parte donde creo que esta el error y un par de enlaces con el código por si le queréis echar un vistazo.
Gracias de antemano.
Jick
Código:
Pst: Si queries el codigo compelto o el guion pedirmelo y os lo paso por mp enlace de mu ya que aun no me deja el foro publicar enlaces "leyes anti-spam" //prueba7.cpp #include <iostream> #include <cstring> #include "Tablero.h" #include "Preguntas.h" #include "cadenas.h" #include "con_ras.h" #include "terminal.h" #include "graficos.h" using namespace std; using namespace graficos; int main() { int nf=0, nc=0, sep_an=0, sep_al=0; char *interro=new char[100]; strcpy(interro,"../data/caras1/desconocido.bmp" ; Tablero uno; Tablero dos; con_per per; cin >> per; cin >> nf; cin >> nc; cin >> sep_an; cin >> sep_al; cin >> uno; cin >> dos; uno.IntroPersonajeOculto(cin,uno); dos.IntroPersonajeOculto(cin,dos); uno.Random_Tablero(per,nf,nc); dos.Random_Tablero(per,nf,nc); uno.Random_Oculto(per); dos.Random_Oculto(per); CrearVentana(1056,728,"titulo" ; uno.PintaTodoHumano(sep_al,sep_an,nf,nc); dos.PintaTodoMaquina(interro,sep_al,sep_an,nf,nc); EsperarTecla(); } <code> Parte privada de personaje y la sobrecarga de la entrada estandar class Personaje { char* name; char* direc_img; int num_ras_per; con_ras ras_per; Imagen person; bool tachado; ---------------0----------------- istream& operator >> (istream& is, Personaje &per) { per.name=new char [15]; is.getline (per.name,15); per.direc_img=new char[100]; is.getline (per.direc_img, 100); per.ras_per.Meter_personaje(is, per.ras_per); per.num_ras_per=per.ras_per.Size_con_ras(); per.person.leerimagen(per.direc_img); return is; } Metedo meter personajes que esta en conjunto de rasgos con_ras Privada: class con_ras { Rasgo** conjunto; int num_ras; int ras_almacenados; ----------0--------------- istream& con_ras::Meter_personaje (istream &is, con_ras &cr) { char* r; char *tipo; is>>cr.num_ras; is.get(); cr.conjunto=new Rasgo* [cr.num_ras]; for (int i=0; i<cr.num_ras; i++) { r=new char [20]; tipo=new char[10]; is.getline (r,20); is.getline (tipo,15); cr.conjunto[i]=new Rasgo; (*cr.conjunto[i]).Modif_Nombre_num_tip(r,tipo); delete []r; delete []tipo; cr.ras_almacenados++; } return is; } Modif_Nombre_num_tip(r,tipo) metodo de class rasgo privada rasgo: class Rasgo { char* pregunta; char* r; int num_tip; Cadenas tipos; ----------0------------- void Rasgo::Modif_Nombre_num_tip(const char* r,char* tipo) { char *aux; this->r=new char [strlen(r)+1]; strcpy(this->r,r); this->r[strlen(r)]='\0'; this->num_tip=1; tipos.AddCadenas(tipo); pregunta=new char[strlen(tipo)+1]; strcpy(pregunta,tipo); pregunta[strlen(tipo)]='\0'; } AddCadenas metodo de Cadenas Privada: class Cadenas { char **pp; int num_cad; int num_almacenada; ----------0------------- void Cadenas::AddCadenas(const char *nueva) { if (SizeCadenas()==0) { num_cad=1; pp=new char* [num_cad]; pp[0]=new char [strlen (nueva)+1]; strcpy(pp[0], nueva); pp[strlen(nueva)]='\0'; num_almacenada=1; } else if (SizeCadenas()==num_cad) { char** aux; num_cad++; aux=new char*[num_cad]; aux[num_cad-1]=new char [strlen (nueva)+1]; strcpy(aux[num_cad-1], nueva); aux[strlen(nueva)]='\0'; for (int i=0; i<num_almacenada; i++) { aux[i]=pp[i]; } delete []pp; num_almacenada++; pp=aux; } } La info se la paso con fichero de configuración sin espacios ni comentarios y por la entrada estandar ›.