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):
...
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.
Comproba la memoria de tu proceso, tal vez tengas un memory leak.
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.
455.282.688 bytes == 455.282 kilobytes == 455 megabytes
Dado que es bastante, ¿es posible que no encuentre medio GigaByte de memoria libre consecutiva?
Cita de: SARGE553413 en 5 Septiembre 2014, 20:27 PMDe 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).
Cita de: ivancea96 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?
Eso mismo pensé yo, pero imagino que el SO se encargará de solucionar esas cosas, ¿me equivoco?
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.