Stay Practiced.
Local toolsSite guideSettings
Curriculum

C: memory, representation and systems

Progress from representation and pointers through allocation, text, binary protocols, files, owned structures and instrumented parsers.

20 units · Plus, Pro · 20 programming subjects + 2 security tracks

Branches show this unit’s authored theory, coding and assessment work.

Select a node. Drag the background to pan.100%

Unit 1 / 20

Prove arithmetic fits before evaluating it

Make widths, signedness and text grammar explicit, and preserve the caller output whenever a C arithmetic or parsing operation is invalid.

0 prerequisite skills · Reading, guided completion and independent success remain separate evidence.

Open this unit

The course, in order

Open a unit in the map to inspect its activities. Reading, guided completion, independent work and review remain distinct evidence.

  1. Prove arithmetic fits before evaluating it

    Make widths, signedness and text grammar explicit, and preserve the caller output whenever a C arithmetic or parsing operation is invalid.

    Open this unit
  2. Parse the whole scalar before publishing it

    Validate fixed grammar, range and calendar rules without accepting prefixes, locale variation or a partially written output.

    Open this unit
  3. Carry the bound with every borrowed pointer

    Validate length, capacity, termination and aliasing before touching a C buffer, including a source range inside the destination allocation.

    Open this unit
  4. State the valid range before the first read

    Express iteration with size_t bounds that handle empty and singleton ranges without underflow, distinguish not-found from index zero, and touch only the declared span.

    Open this unit
  5. Validate encoded text before normalizing it

    Read exactly the supplied byte span as strict UTF-8 or a portable ASCII identifier, with explicit NUL and capacity policy.

    Open this unit
  6. Decode into a staged text buffer

    Validate percent escapes, HTTP field controls and quoted-field grammar before overlap-safe publication with one explicit terminator policy.

    Open this unit
  7. Decode bits and prefixes without host assumptions

    Read canonical variable-length integers and bounded signed bit fields using explicit byte order, width and publication rules.

    Open this unit
  8. Treat formatted length as a checked result

    Measure complete formatted output, preserve variadic type information and write borrowed sinks only after one bounded record is ready.

    Open this unit
  9. Validate the whole source before touching the destination

    Normalize portable relative paths lexically and stage bounded file input so oversize or malformed source data cannot partially publish.

    Open this unit
  10. Name borrowed views and detached copies separately

    Return span offsets into caller storage when borrowing and allocate or fill independent preview bytes only after complete capacity validation.

    Open this unit
  11. Commit new ownership only after allocation succeeds

    Preserve prior valid state across allocation failure and unwind each successfully acquired allocation exactly once in reverse construction order.

    Open this unit
  12. Drain the record and publish only a valid decode

    Own FILE state across short input and errors, enforce byte and grammar bounds before retention, and leave destination data untouched when a complete record cannot be decoded.

    Open this unit
  13. Verify integrity before copying payload bytes

    Compute portable network checksums and validate a record CRC before publishing an overlap-safe payload or its used length.

    Open this unit
  14. Validate every edit before moving bytes

    Apply alias-safe range replacements or an index-removal batch only after shape, size, order and capacity have all been proved.

    Open this unit
  15. Move list ownership without recreating nodes

    Filter and merge acyclic malloc-owned lists while preserving survivor identity, deterministic tie order and exactly-once deallocation.

    Open this unit
  16. Keep identity valid across reuse and growth

    Reject stale pool handles with generations and return stable interned string pointers whose storage is owned independently of caller buffers.

    Open this unit
  17. Stage complete records across file boundaries

    Import whole big-endian records atomically and find a byte pattern incrementally even when it crosses an internal read boundary.

    Open this unit
  18. Observe cancellation between effects and unwind all ownership

    Check cancellation before each callback effect and consume registered cleanups in reverse order even after one cleanup reports failure.

    Open this unit
  19. Treat instrumentation and atomic publication as evidence

    Combine bounded framing, integrity, checked state transitions and final publication, while interpreting supplied instrumentation output without mistaking silence for a clean run.

    Open this unit
  20. Plan the whole bounded state change before commit

    Produce a deterministic dependency order and apply a registry command batch with private staging and complete rollback on any invalid command.

    Open this unit
TheoryHands-on codingEvidence / reviewTechnical wikiMembership access