Вы можете создавать утечки памяти с помощью арифметики с указателями, располагая указатель в неправильном месте, чтобы больше не было ссылок на фрагмент памяти, на который вы указывали.
Это утечка памяти, независимо от того, были ли указанные данные выделены с помощью malloc () или статически.Утечки динамической памяти с помощью malloc (), тем не менее, опасны, тогда как утечки статической памяти безвредны.
Обратите внимание, что указание за пределы массива - неопределенное поведение: может произойти все что угодно.Выполнение арифметики с указателями над указателями, указывающими на разные массивы, также является неопределенным поведением.
Некоторые примеры неопределенного поведения:
typedef struct
{
char array1 [6] = "hello";
char array2 [6] = "world";
} HelloWorld_t;
HelloWorld_t hw;
const char* ptr = hw.array1;
ptr += 6; /* undefined behavior, out of bounds of the original array */
puts(ptr); /* anything can happen here: the program may crash */
puts(array2 - 6); /* also undefined behavior */