. Внимательно посмотрите на строку, которая доставляет вам неприятности:
int val = *src++;
Вы должны признать, что это оператор приращения постфикса, поэтому мы можем разделить эту строку на две части:
int val = *src;
++src;
На данный момент val
имеет копию значения src
, указывающего на при запуске функции;тем временем src
сам теперь указывает на следующую ячейку памяти.
Здесь нет ничего, что проверяет, является ли указатель src
нулевым, и его нулевое значение (или иное) не имеет отношения к тому, какое значение хранится вval
.