pregunta lo dice todo, pero aquí es un ejemplo:¿Cómo manejar Realloc cuando falla debido a la memoria?
typedef struct mutable_t{
int count, max;
void **data;
} mutable_t;
void pushMutable(mutable_t *m, void *object)
{
if(m->count == m->max){
m->max *= 2;
m->data = realloc(m->data, m->max * sizeof(void*));
}
// how to handle oom??
m->data[m->count++] = object;
}
Cómo puedo manipular los quedando sin memoria y no NULL todos mis datos?
editar - supongamos que hay algo que podría hacerse, p. libere algo de memoria en algún lugar o al menos dígale al usuario "no puede hacer eso, se le acabó la memoria". Idealmente, me gustaría dejar lo asignado allí.
altamente dependiente de la aplicación ... pero una cosa es segura, una OOM es bastante crítica. – jldupont
relacionado: http://stackoverflow.com/questions/1941323/always-check-malloced-memory – jldupont
Solo para agregar a un par de respuestas aquí, una idea de cómo manejar un 'realloc()' fallido (en su caso) sería hacer 'm-> max/= 4; m-> max * = 3; 'e intente llamar a' realloc() 'nuevamente para ver si aún podemos exprimir algunos bytes más. Incluso podría probar un par de veces con tamaños sucesivamente más pequeños, pero en algún momento no valdrá la pena. –