Como posso lidar corretamente com a falha de malloc em C, especialmente quando há mais de um malloc?
Suponha que isso faça parte do meu código:
int foo()
{
char *p, *q ;
if((p = malloc(BUFSIZ)) == NULL) {
return ERROR_CODE;
}
if((q = malloc(BUFSIZ)) == NULL) {
free(p)
return ERROR_CODE;
}
/* Do some other work... */
free(p);
free(q);
}
Como é possível que o primeiromalloc
é bem sucedido, mas o segundo falha, eu usofree(p)
no segundo "manipulador de erros". Mas e se houver maismalloc
e se eu quiser modificar o código (ajustando seus pedidos, adicionando ou excluindo algunsmalloc
)?
Eu sei que em C ++ existem coisas como RAII e exceção segura, etc. Mas, em geral, qual é a maneira correta de lidarmalloc
falha em C? (talvez usando algunsgoto
?)