typestar

goto para limpiar en C

El único goto que la gente de C defiende: una sola salida que libera lo que se tomó.

#include <stdlib.h>

int build(int n, int **out) {
    int *first = malloc((size_t) n * sizeof(int));
    if (first == NULL) {
        goto fail_first;
    }
    int *second = malloc((size_t) n * sizeof(int));
    if (second == NULL) {
        goto fail_second;
    }
    for (int i = 0; i < n; i++) {
        first[i] = i;
        second[i] = i * i;
    }
    free(second);
    *out = first;
    return 1;

fail_second:
    free(first);
fail_first:
    *out = NULL;
    return 0;
}

Cómo funciona

  1. Cada falla salta a una sola etiqueta en vez de repetir los free.
  2. Los recursos se liberan en orden inverso a su adquisición.
  3. Saltar hacia atrás, en cambio, es como empieza el espagueti.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
25
Caracteres a escribir
394
Tokens
137
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 82 segundos.

Escribe este fragmento

Paso 4 de 4 en Propiedad y errores; paso 18 de 25 en Punteros y memoria.

← Anterior Siguiente →