zippo[0] это адрес первого элемента в подмассиве ({2, 4}) т.е 2.
#include <stdio.h>
int main()
{
int a[4] = {1,2,3,4};
int *p = (int*)&p;
printf("%p, %p\n", a, &a);
printf("%p, %p\n", p, &p);
}#include <stdio.h>
int main()
{
int *a1 = (int*)&a1;
int *a2 = a1;
printf("%p, %p\n", a1, &a1);
printf("%p, %p\n", a2, &a2);
}
Каким-нибудь process explorer можно посмотреть сколько хендлов ваша программа имеет, если это число растет, надо разбираться, какие из виндовых объектов вы правильно не уничтожаете. Вроде бы все битмапы вы корректно уничтожаете через DeleteObject, возможно ошибка в другом коде.
Можно еще поробовать вашу программу подебажить. Вот когда окно вылезает, какой ваш код выполняется? Подключитесь к вашему процессу visual studio и смотрите. Или добавьте отладочный вывод, чтобы понять, какая функция начинает выполнятся но не заканчивает. Это подскажет вам, какие объекты вы не удалили правильно.
std::ranges::advance будет внутри циклом. Нет, https://en.cppreference.com/w/cpp/iterator/ranges/...:However, if I additionally models std::random_access_iterator, or S models std::sized_sentinel_for, or I and S model std::assignable_from, complexity is constant.
Но мне больше нравится reinterpret_cast, потому что union с одним значением выглядит диковато. И вообще, это использование не по назначению ради побочных эффектов.
Вам надо выделить память, но не вызывать у нее деструктор. Отдельный массив тут выглядит логичнее. Хотя это вксовщина.