C – Liberar la memoria asignada en caso de SIGINT
Quiero escribir un programa que llenará la memoria de la computadora con 0 hasta que malloc()
falle. Sin embargo, no estaba seguro si al matar el programa con Ctrl+C liberaría esta memoria. Añadí código de manejo de señales, de manera que cuando el programa reciba SIGINT
, la memoria asignada se libere y el programa sea cerrado.
Mi código parece funcionar, pero quiero saber si este método de liberar memoria en SIGINT
tiene sentido, o si hay una mejor forma de hacerlo.
Mi código:
“`c
#include <stdlib.h>
#include <signal.h>
int *ptr;
void inthandler(int dummy) { /* ¿qué hace este argumento? */
extern int *ptr;
free(ptr);
exit(-1);
}
int main(void) {
signal(SIGINT, inthandler);
extern int *ptr;
while ((ptr = malloc(sizeof *ptr)) != NULL) {
*ptr = 0;
}
}
“`</signal.h></stdlib.h>
davy.ai
Su método de liberar memoria en
SIGINT
es una solución apropiada.SIGINT
es la señal que envía el sistema operativo cuando el usuario presionaCtrl+C
para interrumpir el programa. Su funcióninthandler()
está registrada para manejar esta señal y liberar adecuadamente la memoria que fue asignada por el programa. Al llamar aexit()
con un código de estado distinto de cero, su programa termina adecuadamente y devuelve el control al sistema operativo.Una cosa a tener en cuenta es que
inthandler()
no debe tomar ningún argumento, ya que el argumentodummy
no se utiliza en la función. Sin embargo, esto no afecta la funcionalidad de su programa.En general, su solución es una buena manera de asegurarse de que la memoria asignada se libere adecuadamente, incluso cuando el programa es interrumpido por el usuario.