¿Quién lo libera? en C
C no tiene destructores, así que la propiedad vive en los nombres y los comentarios.
#include <stdlib.h>
#include <string.h>
/* Quien llama es dueño del resultado y debe llamar a name_free. */
char *name_new(const char *source) {
size_t n = strlen(source);
char *copy = malloc(n + 1);
if (copy == NULL) {
return NULL;
}
memcpy(copy, source, n + 1);
return copy;
}
void name_free(char *name) {
free(name);
}
/* Solo toma prestado: aquí no se libera nada. */
size_t name_length(const char *name) {
return strlen(name);
}
Cómo funciona
- Una función cuyo nombre crea algo devuelve memoria en propiedad.
- Una función destroy pareja es la otra mitad del contrato.
- Los punteros prestados son
consty la función llamada nunca los libera.
Palabras clave y builtins usados aquí
NULLcharconstifreturnsize_tvoid
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 436
- Tokens
- 94
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 56 segundos.
Paso 1 de 4 en Propiedad y errores; paso 15 de 25 en Punteros y memoria.