Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-12-2007
gerardorom gerardorom is offline
Miembro
 
Registrado: dic 2007
Posts: 22
Poder: 0
gerardorom Va por buen camino
Uso de clases, ¿que estoy haciendo mal?

Hola amigos Feliz Navidad! Mi duda es la siguiente:

Estoy creando un reproductor + efectos para .wav haciendo uso de una series de buffer de memoria de tipo short. Al principio, cree mi aplicacion sin clases haciendo lo siguiente,y consiguiendo reproducir mi archivo wav sin problemas una y otra vez:

Código Delphi [-]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
int tambuffer,tamcir,z,j;
bool buf1;
short *datos,*buffer1,*buffer2,*cir;
    tambuffer=2000;
    tamcir=20000;
...
for(j=0;j< tambuffer;++j)
             {
              cir[z]=datos[j];           
                   if(buf1)
                    {
                      buffer1[j]=datos[j];
                    }
                   else
                    {
                      buffer2[j]=datos[j];
                    }
              }
...

Bueno, de echo, la clase si estaba creada y añadida al proyecto, pero no la usaba, usaba las variables buffer, cir y datos, creadas directamente dentro de la rutina asiciada al click del boton de "play".

Posterior mente, empece a hacer uso de mi clase, que tiene el siguente aspecto:

Código Delphi [-]
class Cefecto
{
 private:
         short *buffer1;
         short *buffer2;
         short *cir1;
         short *cir2;
         short *cir3;
         
 public:
       int delaym;
       int tambuf;
       int tamcir;
       Cefecto();
       Cefecto(int delaym,int tambuf,int tamcir);
       ~Cefecto();
        void conftarj();
        void reproducir(char* nombre);
        void memoria();
 };

Despues, en mi aplicacion, hago lo siguiente:

Código Delphi [-]
Cefecto efecto(5000,2000,20000);
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
...
efecto.memoria();       
 efecto.conftarj();      
efecto.reproducir(nombre);
...

Y por ultimo os pongo un trocito de esas tres rutinas, donde yo creo que puede estar el fallo:
Código Delphi [-]
 void Cefecto::memoria()
    {
     buffer1 = new short[tambuf];
     buffer2 = new short[tambuf];
     cir1= new short[tamcir];
     cir2= new short[tamcir];
     cir3= new short[tamcir];
     };
 
 void Cefecto::reproducir(char* nombre)
    {...
     short *datos;
    datos = new short[tamiter];
    ...
    for(j=0;j< tambuf;++j)
             {
                 cir1[z]=datos[j];            
                   if(buf1)
                    {
                      buffer1[j]=datos[j];
                    }
                   else
                    {
                      buffer2[j]=datos[j];
                    }
...
}
//Es igual que antes pero ahora cir1 y buffer1 no lo creo en "void reproducir" sino que lo tomo de la clase.


El fallo que me da es el siguiente:

"Project Project2.exe raised exception class Eaccessviolation with message 'Access violation at address 01193EA6. Write of adress 0119FFEE'. Process stoped. Use step or run to continue. "

Y me aparece cuando llamo por 2ª vez a "reproducir" o cuando cierro mi aplicacion, pero la 1ª vez que llamo a reproducir no me da ningun, fallo, yme reproduce bien, osea, que me esta llenando los buffers correctamente.


¿Alguna idea?¿?¿¿ Muchisimas gracias de antemano. y Feliz Navidad!!
Responder Con Cita
  #2  
Antiguo 26-12-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Hola, no me lo he mirado a fondo, si tengo tiempo me lo miro bien ()... pero por lo que explicas, de que funciona bien una primera vez pero no una segunda, y sumandole que usas buffers y que el error es un Access Violation... a mi me viene a la cabeza que el error quizas ocurre porque no liberas los buffers correctamente al terminar la primera repetición, y por esto al intentar usarla por segunda vez (con su buffer lleno y todo esto, vamos que no es virgen xD) pues puede provocar que intentes leer en un sitio fuera de memoria, etc... etc....

Ya te digo que no me lo he mirado a fondo, es todo fruto de la imaginación, o sea que no te lo tomes como si este fuera el fallo, simplemente comprueba que liberas todos los buffers al terminar, etc... etc...

Saludos y bones festes.
Responder Con Cita
  #3  
Antiguo 26-12-2007
gerardorom gerardorom is offline
Miembro
 
Registrado: dic 2007
Posts: 22
Poder: 0
gerardorom Va por buen camino
tio mil gracias, estaba super convencido que era por el uso de las clases, y era que me salia del indicie de uno de los buffer!! pero esque esebuffer, en el "reproducir" pues se llenaba por lomenos 300 veces, y solo me saltaba el fallo al cerrar la aplicacion! o intentar reproducir de nuevo, jujujujujuj que felicidad gracias !!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Que estoy haciendo mal ? piolillo Internet 8 28-07-2011 17:23:24
Que estoy haciendo Mal esimon SQL 4 04-07-2006 21:55:25
La web que estoy haciendo (si, ya esta colgada) papulo HTML, Javascript y otros 25 11-01-2006 15:47:42
Que estoy Haciendo mal jostrix PHP 1 01-11-2004 01:29:16


La franja horaria es GMT +2. Ahora son las 12:08:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi