Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error en la ejecución perdida de memoria.

Estas en el tema de Error en la ejecución perdida de memoria. en el foro de C/C++ en Foros del Web. Buena es la primera vez que escribo aquí por lo que soy poco novatin en este sentido pero bueno empecemos pues. Estoy creando un juego ...
  #1 (permalink)  
Antiguo 18/08/2009, 04:26
 
Fecha de Ingreso: agosto-2009
Mensajes: 1
Antigüedad: 14 años, 8 meses
Puntos: 0
Error en la ejecución perdida de memoria.

Buena es la primera vez que escribo aquí por lo que soy poco novatin en este sentido pero bueno empecemos pues.

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:
Pst no me dejan poner enlaces aun ¬.¬
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 ¬.¬.
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:
//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 ›.
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"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:17.