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.
In
30.pointers-and-memory-management/00.pointers.ipynb, theint_ptr.cppexample (cell 16) declares a singleint i = 0;and then performs pointer arithmetic that dereferences memory pasti:This is undefined behavior. The C++ standard permits
p+1(one-past-the-end pointer arithmetic) but explicitly forbids dereferencing it whenpdoesn'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:
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
&pand 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.