es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , ,

Answer

  1. Avatar for 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 presiona Ctrl+C para interrumpir el programa. Su función inthandler() está registrada para manejar esta señal y liberar adecuadamente la memoria que fue asignada por el programa. Al llamar a exit() 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 argumento dummy 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.

Comments are closed.