kangwonlee / kangwonlee/2018pycpp

Pointer arithmetic demo accesses out-of-bounds memory without warning (Ch 30 / 00.pointers.ipynb)

Offen Anfängerfreundlich
#75 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug
Vorherrschende Sprache
Jupyter Notebook
Sterne
3
Forks
1
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

In `30.pointers-and-memory-management/00.pointers.ipynb`, the `int_ptr.cpp` example (cell 16) declares a single `int i = 0;` and then performs pointer arithmetic that dereferences memory past `i`:

```cpp
int i = 0;
int *p = &i;
// ...
cout << "*(p + 1) = " << ... << *(p + 1) << '\n'; // dereferencing OOB
cout << "*(p + 2) = " << ... << *(p + 2) << '\n'; // dereferencing OOB
```

This is undefined behavior. The C++ standard permits `p+1` (one-past-the-end pointer arithmetic) but explicitly forbids dereferencing it when `p` doesn't point into an array. The demo "works" because the runtime happens to allow reading adjacent stack memory, but the output is shown to students as if it were a normal pattern to learn from — which risks teaching the wrong mental model.

### Suggested fix (preferred: option 1)

**Option 1 — make the example valid by using an actual array:**
```cpp
int arr[3] = {0, 1, 2};
int *p = arr;
// (p+1) and (p+2) are now valid dereferences into arr[1] and arr[2]
```

**Option 2 — keep the example but add a markdown cell** explicitly noting this is UB, and that the output happens to read adjacent stack memory (sometimes `&p` and parts of the stack frame).

Option 1 is cleaner for a teaching context: students see correct pointer arithmetic without needing the UB sidebar.

### Context
Surfaced during Ch 30 evaluation. Small isolated change; pairs well with the `delete[]` bug fix as another "first commit" candidate.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Open 30.pointers-and-memory-management/00.pointers.ipynb and inspect cell 16's int_ptr.cpp example. Replace the single-int setup with the valid array-based example described in the issue, then verify the displayed pointer-arithmetic output no longer dereferences out-of-bounds memory.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
cpp, jupyter-notebook
Bereich
documentation
Issue-Typ
Bug
Schwierigkeit
1/5
Geschätzter Aufwand
Unter einer Stunde
Aktivitätsstatus
Ruhig
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
78/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.