Ринат Велиахмедов: В Сишке нет std::vector, а эта структура позволяет хранить длину массива и указатель на него совместно. Костыль для тех, кто не умеет в vector.)
Я бы выпилил такую запись из стандарта с громкими ругательствами.
Николай Романович: Согласен, был не прав, это не UB. Это стандартизированный сишный костыль.) Будет весело написать такое на С++ и использовать такую структуру в качестве базового класса при множественном наследовании.
И я не заметил, что в malloc суммирование, а не умножение на sizeof(), так что перерасхода памяти и правда нет.
Николай Романович: Это не "фича", а некорректное использование. Поменяйте местами int и char[] и будет очень весело. Опять же, нельзя нарисовать два "нулевых" массива в одной структуре. Это ужаснейший косяк языка, позволяющий говнокодить.
Николай Романович: Я прав, а malloc вообще не выделяет структур, он выделяет блок байт. somaArray[] содержит адрес пустого массива. Пытаясь его индексировать, вы обращаетесь к памяти ЗА пределами структуры. Размер структуры равен sizeof(int) + sizeof(someArray[]) + возможное выравнивание. Ни о каких 100500 и речи быть не может.
Такая путаница ещё раз подтверждает, что в 99.99% случаев лучше забыть про malloc, т.к. понять его работу гораздо сложнее, чем new.
Николай Романович: Ну так это вы просто не правильно с памятью работаете. Выделяете не структуру с массивом в 100500 байт, а выделяете 100500 структур размером sizeof(SomeStruct). Её размер как минимум 4 байта (размер someArray[] может варьироваться в зависимости от 100500 факторов). Т.е. выделяете памяти минимум в четыре раза больше, чем хотите, а потом делаете вид, что это new кривой и не позволяет писать неадекватную чушь.)
Николай Романович: Не уверен на счёт нового стандарта, но в старом стандарте это не безразмерное поле, а массив фиксированного размера, но размер определяется правой частью. Либо массив нулевой длины, но от него смысла вообще минимум.
Pavel Designer: Я не правильно выразился.) C переключает на команду crop, которой потом надо выделять область и нажимать enter. Я же имел в виду M, чтобы именно выделить и сделать crop выделения (через меню команда есть). Тогда можно сразу выделять область для размытия, не переключая инструмент. Хотя это переключение занимает целое одно нажатие кнопки...
kamwork: Самым эффективным было бы написать свою утилиту, которая умеет только кропить и блюрить.
Но вернёмся к фотошопу.
Для кропа нет горячей клавиши, но можно сделать скрипт, а уже скрипт повесить на комбинацию кнопок. Замыливание будет доступно по Ctrl+F, если других фильтров не вызывать, но лучше тоже скрипт сделать. Тогда обработка будет выглядеть так:
1. открываете файл (любым удобным способом)
2. выделяете нужную область (размер области можно или задать в пикселах или указать пропорции, чтобы все картинки одинакового размера получались)
3. нажимаете горячую клавишу для кропа (какую сами макросу назначите)
4. выделяете область для размытия
5. нажимаете другую горячую клавишу, для макроса размытия
6. сохраняете
Ринат Велиахмедов: Очень правильное замечание (не пользуюсь malloc/free, так что даже не уточнял, как они работают). Тогда разница только в вызовах конструктора/деструктора. Что опять же приводит к тезису, что нафиг malloc/free в С++ не нужен. Только для совместимости.
Ринат Велиахмедов: Чтобы корректно работал delete/delete[]
Вообще, на 100% уверен, что в различных архитектурах может быть различная реализация. Но для работы delete[] необходима служебная информация.
Ринат Велиахмедов:
new int; // выделяется 4 байта под число, плюс 4-8 байт служебных данных перед ними.
malloc(4); // выделение 4 байт, Без служебных данных.
Михаил Вальков: скрипт напишите. Или демона какого-нибудь, чтобы отслеживал наличие запущенной IDE и запускал ADB, например.
Я в файловом менеджере кнопку добавил, чтобы коннектится только тогда, когда мне это нужно.
Михаил Вальков: Студия никуда не подключается в принципе. Взаимодействие с устройством происходит через ADB, а оно уже сконектчено указанной коммандой. Если выключить сервис ADB, то её придётся выполнять вновь.
По USB отладка так же происходит через ADB. Все эти ID это графические оболочки над консолькой.
Артем: Гугл разрешает продавать только через них. Т.е. нельзя оплачивать на стороннем сервисе, но верифицировать в гугле, за такое приложение удалят из маркета и могут аккаунт забанить. А если платите при помощи их API, то по окончании платежа узнаёте об этом. Функция, для проверки того, то товар куплен, тоже есть. В приведённой мной ссылке удобная и простая обёртка над in app billing API v3, которая всё это умеет.
А вот по результатам этих функций можете отправлять сведения на свой сервер.
Я бы выпилил такую запись из стандарта с громкими ругательствами.