Skip to content

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

@kwlee2025cpp

Description

@kwlee2025cpp

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:

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:

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions