This commit is contained in:
2026-10-05 21:45:53 +02:00
parent b15620838b
commit 8383a725e2
3 changed files with 27 additions and 8 deletions
+10 -2
View File
@@ -4,8 +4,11 @@
- **Fase 2**: buffer dinámico. La Fase 1 está cerrada en Fedora, pero falta
probarla en Windows.
- Paso actual: 2.3b, `escpos_buffer_append` (varios bytes: puntero `const` +
cantidad + `memcpy`). El 2.3a ya está hecho: `buffer_reserve`, `static`, `t` en `nm`.
- Paso actual: 2.3b. `hello.c` ya usa bien `goto cleanup` (punteros a `NULL`
uno por línea, `result`, un solo `return`), sin avisos con gcc ni clang, y
Valgrind limpio. Falta `escpos_buffer_append`: el parámetro con la cantidad,
`const`, reservar `len + cantidad`, `memcpy` y el comentario de la cabecera.
Ahora copia 1 byte (`sizeof *byte`).
- Entorno activo: Fedora 42 nativo (gcc 15.2, clang 20, make 4.4, gdb 17,
valgrind 3.26).
@@ -36,6 +39,7 @@
`$@ $< $^`, `.PHONY`.
- Pila y montón, `malloc`/`free`/`realloc`, `NULL`, propiedad de punteros,
tipo opaco, `typedef`, `->`, `uint8_t`/`size_t`, qué tipo usar.
- Liberar en caminos de error sin `defer`: patrón `goto cleanup`.
- Depuración: *segfault* (139), `free(): invalid pointer` (134), gdb básico,
y leer errores e informes de fugas en Valgrind.
@@ -76,6 +80,10 @@
cambiaba (`buffer->cap`) o que empezaba en 0, y eso daba bucles infinitos.
Lo resolvió siguiendo los valores vuelta a vuelta. Seguir pidiéndole trazas
a mano.
- Declaraciones múltiples: escribió `escpos_buffer *a, *b, *c = NULL;` creyendo
que las tres valían `NULL` (solo la última). Lo detectó clang con
`-Wsometimes-uninitialized`. Ahora declara una variable por línea.
- Variables locales sin inicializar: creía que valían `NULL` como en Go.
- Impresoras físicas: sin registrar marca y modelo.
- Confunde puntero colgante ("se pierde") con fuga. Tampoco tenía claro por qué
el slice viejo es seguro en Go tras `append` (el GC no libera el array viejo,