elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  new lanza bad_alloc y no sé por qué
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: new lanza bad_alloc y no sé por qué  (Leído 2,153 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
new lanza bad_alloc y no sé por qué
« en: 5 Septiembre 2014, 18:50 pm »

Hola a todos.

Tengo un problema con un programa de C++. En un momento dado intento reservar memoria mediante el operador 'new', pero este lanza 'bad_alloc' y no entiendo por qué, ya que la cantidad de memoria que quiero reservar es relativamente baja para lo que tiene mi PC (3 GB).
Adjunto código, errores etc:

Cantidad de bytes (unsigned char) que intento reservar: 455282688 - 455,282,688 bytes

Datos extraídos del admin. de tareas durante el error:
Memoria física (KB)
Total: 3145068
Disponible: 1300596 - 1301394
Caché sistema: 1100432 (+ o -)

Mensaje de error por pantalla (con std::exception::what)
bad allocation

Código (indico el error):
Código:
...
typedef unsigned char uchar;
...

uchar* FrameLinkCamThread::getAttachedCapturedFrames(ulong &_totalSize){
ulong tSize=0;
for(uint i=0;i<this->numFramesCaptured;i++) tSize+=this->framesLegths[i];
uchar *res=NULL;
try{
res=new uchar[tSize];  //<==== Aquí esta el error
}catch(bad_alloc &e){
cout<<e.waht()<<endl;
char buff[256];
cin.getline(buff,256);
}
uint k=0;
for(uint i=0;i<this->numFramesCaptured;i++){
memcpy(&res[k],this->frames[i],this->framesLegths[i]);
k+=this->framesLegths[i];

}
_totalSize=tSize;
return res;
}

Nota: He intentado reservar en el main un vector igual que 'res' (que es el que da el error) y lo reserva sin problemas.

No entiendo cuál es el problema, ¿alguien puede ayudarme por favor?

Gracias, saludos.


« Última modificación: 5 Septiembre 2014, 18:55 pm por SARGE553413 » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: new lanza bad_alloc y no sé por qué
« Respuesta #1 en: 5 Septiembre 2014, 19:11 pm »

Comproba la memoria de tu proceso, tal vez tengas un memory leak.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: new lanza bad_alloc y no sé por qué
« Respuesta #2 en: 5 Septiembre 2014, 20:27 pm »

Hola de nuevo, gracias por la respuesta.

En su día ya "depuré" las fugas de memoria (tenía una y gorda). Lo hice solo con el admin. de tareas, viendo lo que se llenaba la memoria. Imagino que habrá herramientas para depurar este tipo de cosas, acepto sugerencias.

De todas formas no creo que sea una memory leak, ¿puede ser que mi SO (win xp) limite la cantidad de memoria que puede reservar un proceso?

Gracias, saludos.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: new lanza bad_alloc y no sé por qué
« Respuesta #3 en: 5 Septiembre 2014, 20:40 pm »

455.282.688 bytes == 455.282 kilobytes == 455 megabytes

Dado que es bastante, ¿es posible que no encuentre medio GigaByte de memoria libre consecutiva?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: new lanza bad_alloc y no sé por qué
« Respuesta #4 en: 5 Septiembre 2014, 21:49 pm »

De todas formas no creo que sea una memory leak, ¿puede ser que mi SO (win xp) limite la cantidad de memoria que puede reservar un proceso?

Siendo XP asumo que es de 32 bits, en ese caso normalmente tu programa tiene un espacio de direcciones de 2 GB (el cual ya esta ocupado en parte por tu programa, las DLLs que hayan cargadas y la memoria dinamica).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: new lanza bad_alloc y no sé por qué
« Respuesta #5 en: 6 Septiembre 2014, 14:13 pm »

455.282.688 bytes == 455.282 kilobytes == 455 megabytes

Dado que es bastante, ¿es posible que no encuentre medio GigaByte de memoria libre consecutiva?

Eso mismo pensé yo, pero imagino que el SO se encargará de solucionar esas cosas, ¿me equivoco?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: new lanza bad_alloc y no sé por qué
« Respuesta #6 en: 6 Septiembre 2014, 14:36 pm »

La memoria que reservan los programas, reservada está, eso no lo cambia porque un programa quiera user mucha memoria.
En lugar de hacer tal asignación de memoria, trata de partir en pequeños "new", por ejemplo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
iOS 6 se lanza hoy oficialmente
Noticias
wolfbcn 0 1,303 Último mensaje 19 Septiembre 2012, 12:41 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines