have_a_questions: Объявление переменной, а не типа. В Си/С++ это было бы создание переменной в стеке, в java в стеке только примитивные типы создавать можно, а классы только в куче. Так что относительно памяти, первая запись это не инициализированный "указатель", а вторая запись это создание реального объекта по "указателю". Это если в терминологии крутых языков программирования говорить.)
MicroSDA: считываешь строковый токен, через if-elseif-else выбираешь нужный блок кода. В нём считываешь слова/числа в зависимости от того, что в блоке может храниться. Как я уже писал, лучше предварительно загрузить весь файл в память, тогда можно будет использовать сишные функции substr и прочие. atoi - для преобразования строки в число.
Единственная сложность - переменное число аргументов. Например, для точки может быть xyz или xyzw. Т.е. считывать нужно до конца строки столько аргументов, сколько получится.
Там нужен примитивнейший парсер, указанный объём будет за секунды обрабатывать.
Ринат Велиахмедов: В Сишке нет 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 байт, Без служебных данных.