typestar

Pares init y destroy en C

Cada recurso recibe un init que puede fallar y un destroy que no.

#include <stdlib.h>
#include <string.h>

typedef struct {
    char *name;
    int *values;
    size_t count;
} Session;

int session_init(Session *s, const char *name, size_t count) {
    memset(s, 0, sizeof *s);
    size_t n = strlen(name) + 1;
    s->name = malloc(n);
    s->values = calloc(count, sizeof(int));

    if (s->name == NULL || s->values == NULL) {
        free(s->name);
        free(s->values);
        memset(s, 0, sizeof *s);
        return 0;
    }
    memcpy(s->name, name, n);
    s->count = count;
    return 1;
}

void session_destroy(Session *s) {
    free(s->name);
    free(s->values);
    memset(s, 0, sizeof *s);
}

Cómo funciona

  1. Init retorna éxito y deja el objeto usable o vacío.
  2. Destroy tolera un objeto construido a medias.
  3. Poner en cero al destruir vuelve inofensiva una segunda llamada.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
31
Caracteres a escribir
551
Tokens
195
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 111 segundos.

Escribe este fragmento

Paso 2 de 3 en Encapsulación; paso 6 de 11 en APIs, errores y pruebas.

← Anterior Siguiente →