Задать вопрос
  • Как устроен игровой протокол передачи данных?

    LiptonOlolo , ты всегда в праве оформить свой проект в открытом исходном коде на github. В этом случае там же мы можем продолжить обсуждение в уже более детальном и более развернутом порядке, в формате issue + PR.

    А пока... С наступающим! :)
  • Gtest и Gmock - double free or corruption. Как исправить?

    @MarkusD Куратор тега C++
    aminought , да, это не просто утечка. Это ошибочная инициализация ресурса во время завершения программы.
    "__cxa_finalize" говорит именно об этом. Еще видно что он запнулся на работе с std::string.
    Но это не та утечка, которую видел я. Отчет куцый, путей к файлам очень нехватает.

    Лови мой issue, он на удивление до сих пор открыт. https://github.com/google/googletest/issues/624

    А вот тут один дядя умные речи толкает, желаемо поддержать.
    https://github.com/google/googletest/pull/892
  • Gtest и Gmock - double free or corruption. Как исправить?

    @MarkusD Куратор тега C++
    aminought , в gtest есть утечка из за неправильной инициализации ресурсов во время завершения программы.
    Билли Донехью в ответ на отчет об ошибке сказал что у меня "рожа треснет" и править он ничего не будет.

    Покажи callstack и все остальное.
  • Как устроен игровой протокол передачи данных?

    LiptonOlolo , а ведь именно на этот вопрос отвечают приведенные библиотеки. Но, ок, давай я чуть погодя пороюсь в исходниках Q3 и выложу эти аспекты сюда.

    В общем смысле дело обстоит так.
    Сокет для общения один. Сетевой стек представляет собой луковицу из декораторов (арх. примитив "Декоратор"), в сердцевине которых (в самом конце) и лежит сокет. Это справедливо как для отправки, так и для приема. Вспомни модель OSI и тебе все станет понятнее.
    Стек может быть представлен такими сущностями как: интерфейс сокета, циклический буфер, пточный кодек сжатия трафика, поточный шифратор трафика, сериализатор/десериализатор объектной модели пакетов, диспетчер объектной модели пакетов, фабрика объектной модели пакетов. Может есть что-то еще и я просто забыл об этом.

    Естественно создавать это все на каждый пакет не просто бессмысленно, но и тупо тяжело и долго по времени. Глядя на тег "C#" я начинаю понимать о чем ты спрашиваешь. Ответ - нет. Как только создан сокет, он должен быть окружен сетевым стеком до самого верхнего уровня, на верхушке которого стоит диспетчер с делегатами для обработки принятых пакетов и фабрика для производства пакетов на отправку. Считай что это все лучше сделать в синглтоне.
  • Как разделить жесткий диск на 2 раздела и сделать их с разными файловыми системами?

    АртемЪ , исключительно субъективно - неудобная штука. :)
    ADD, в частности, полезен не только форматированием пространства, но и копированием разделов, способностью расширять имеющиеся разделы, переносить их по пространству винчестера. И он это все делает в режиме сценария.
    Т.е. есть как возможность просто задизайнить себе вид разделов перед фактическим разделением, так и возможность выгрузить сценарий и поставить нарезку разделов на поток в автоматическом режиме.
    Последним у меня на работе админы промышляют, когда команде из 12 человек вдруг становится необходимо сменить винчестеры.
  • Почему ссылка на указатель даёт не верный адрес?

    @MarkusD Куратор тега C++
    Pavel K , тебе явно надо идти в политики! У тебя очень хорошо получается дозировать информацию. :)
    Вот, может быть лучше дополнительно в вопросе описать еще и ошибку?

    Множественное наследование - самая очевидная причина смещения указателя.
    К тому же, нередко размер объекта может отличаться от суммарного размера полей класса. Это может быть как по причине стандартного выравнивания полей класса, так и по причине включения служебной информации о типе в список полей.
    А это уже может приводить к смещению указателя при приведении к родительским типам даже в случае прямого наследования.
    Плюсом Qt. Я не любитель Qt, поэтому не загадываю. Но... Qt. :)

    Иными словами, тревогу по тому поводу можно и не поднимать. До поры.
  • Почему ссылка на указатель даёт не верный адрес?

    @MarkusD Куратор тега C++
    Pavel K , скажи лучше, сабж приводит к AV/SEGV или тебе просто разобраться хочется?
  • Как скопировать объект внутри указателя производного класса?

    @MarkusD Куратор тега C++
    Mercury13 , CRTP - очень интересный подход, когда базовым классом для класса A является инстанциирование некоего шаблона от класса A. Парадокс убитого дедушки прям. :)
    stackoverflow.com/questions/4173254/what-is-the-cu...
    https://en.wikipedia.org/wiki/Curiously_recurring_...

    Все работает по правилам вывода шаблонных типов и их интерфейса.

    Nexeon , еще для решения этой проблемы используют идиомы строителя (Builder) или фабричной функции (Factory function), именуя последнюю копирующей функцией. Так же я с успехом применял визитера (Visitor) на основе шаблонного типа.
    Дизайн этих подходов для решения задачи копирования будет сильно зависеть от уже имеющейся коллекции типов и их устройства.
  • Переменное число параметров функции (variadic template), как сделать рекурсию?

    @MarkusD Куратор тега C++
    Pavel K , Антон задал самый правильный вопрос. Без технического обоснования необходимости именно такой записи любой ответ будет тянуть только на попытку ответа, но не на решение.
  • Что положить в портфолио программиста на Си?

    @MarkusD Куратор тега C++
    Saveli Tomak , в твоем случае хорошо будет смотреться хорошая история контрибутора в open source.
    Проекты ради портфолио не нужны. Нужны проекты, которыми пользуются люди или которые используешь ты сам на постоянной основе.
    Посмотри интересные тебе open source проекты на github, форкни их, разбирайся, пробуй общаться по ошибкам и доработкам с людьми.

    Найти партнеров с конструктивным мышлением и высокими навыками для open source проектов очень тяжело. Поэтому каждый толковый контрибутор на вес золота. Работодатели это хорошо понимают.
  • Верно ли, что занести на свой компьютер вирус невозможно при серфинге по сомнительным сайтам?

    Алексей Николаев , очень странный вопрос.

    https://support.apple.com/ru-ru/HT207275
    https://support.apple.com/ru-ru/HT207270
    https://support.apple.com/ru-ru/HT207269
    Воздействие. Просмотр вредоносного файла JPEG могла привести к выполнению произвольного кода.

    Как ни странно, такие дырки в libjpg находятся все время.

    https://support.apple.com/ru-ru/HT206167
    Но не только в libjpg... В libpng так же все время находятся интересные места.

    А дальше еще интереснее...

    https://xakep.ru/2016/11/22/locky-svg/
    https://xakep.ru/2016/01/04/ransom32/

    https://exploit.in/2016/11105/

    И это еще только картинки. Простые картинки, Карл! Впереди еще непаханное поле самых прекрасных технологий доставки вредоносов самыми мирными путями.
    Дальше продолжать? :)
  • Что происходит с указателем?

    @MarkusD Куратор тега C++
    Александр Казакевич , не, ты точно перетрудился уже. Ну пятый час ночи, спать бы лучше лег пораньше. :)
    Смотри, у тебя метод getUser() возвращает объект по значению. А копирование/перемещение у класса User реализовано? Мне кажется, твой User тоже должен передаваться по указателю, как и все остальные сущности. Не?

    В целом, когда у тебя составной проект, это не слишком хорошо - оперировать значениями переменных.
    User из памяти динамической библиотеки по значению передается в память приложения. Память-то одна и та же - память процесса. Но вот передача по значению... Честно, я не рискну предполагать что там творится. Ни разу сам так не делал и не сталкивался с таким в работе. Но идея мне радикально не нравится.
    Лучше все пограничные интерфейсы между библиотекой и приложением исполнять на указателях и через выделение на куче. Или оперировать указателями из статической памяти. Главное - это указатели и абстрактные классы / интерфейсы, никаких значений.

    В качестве дополнения подкину одну старенькую, но все еще интересную заметку об использовании STL в динамических библиотеках.
    rsdn.org?article/cpp/stlproblem.xml
  • Что происходит с указателем?

    @MarkusD Куратор тега C++
    Александр Казакевич , подозреваю, ты малость рановато беспокоишься. Переработал уже, похоже. :)
    Судя по второму скрину, ты еще не зашел в область метода getUser(). В этом случае осмотр переменных тебе все что угодно может писать.
    Считай так: когда стрелка отладчика смотрит на фигурную скобку, значениям переменных можно временно не верить.
  • Отказоустойчивость iOS/Android приложения?

    Roman Zhak , очень странный вопрос. Все что приложение должно - это стабильно работать и выполнять все заявленные функции.
    Падение у пользователя - признак непрофессионализма разработчиков. Иные мнения - признак непрофесионализма.
    Дискуссии по этому поводу быть не может.
  • Почему не импортируется модуль для Python?

    Константин Алиханов
    https://pypi.python.org/pypi/LiveWires -> www.livewires.org.uk/python -> https://github.com/livewires/python
    Первое что пришло в голову :)

    Обозначенный beginners.py находится внутри LiveWires. Но дальше я, пожалуй, не помошник.
  • Процедура проверки лицензий Майкрософт? Наезд? или развод?

    Интересно, в каком это городе творятся такие выкрутасы? :)

    Я бы на твоем месте задался такими вопросами: Почему мне позвонили? Почему именно мне? Откуда они знают что я использую что-либо из обозначенных продуктов? Как подтвердить подлинность источника звонка?
    Прямо в разговоре я бы поинтересовался, есть ли у той стороны ордер на обыск и судебное распоряжение.

    Судя по всему, это агрессивный фишинг.
  • Всегда ли в C++ false == 0, true == 1?

    @MarkusD Куратор тега C++
    Евгений Обыкновенный , да, все так.
    Только подобная запись не всегда считается "культурным кодом".
    Это уже не стандарт, а культура и гигиена кода. Запись "if( x )" считается культурной только если "x" имеет тип "bool" или является объектом, класс которого имеет перегрузку оператора преобразования "explicit bool".
    В иных случаях сокращать не рекомендуется ради сохранения читаемости кода и понятности производимых действий. Т.е. для сохранения культуры и чистоты самого кода.
  • Какую дорогу в GameDev лучше выбрать?

    @MarkusD Куратор тега C++
    cassin , было бы неплохо обозначить город, где ты учишься.
  • Почему в программах так редко используются переменные повторно?

    Владислав Савин , очень интересный вопрос... Но так просто на него не ответить. :)
    Простая и легко читаемая книжка https://www.ozon.ru/context/detail/id/8466390/ содержит исчерпывающий ответ на этот вопрос.
  • Что должен знать Junior C++ программист на данный момент?

    @MarkusD Куратор тега C++
    Junoir C++ developer должен очень хорошо знать язык.

    Во-первых - свой родной язык. Девлопер со спичем на форижен сленге мирится со слоу респектом у тиммейтов на ворке. Способность чисто декламировать на родном языке, словами без эмоций пояснять свою точку зрения, приводить (обязательно и только)веские аргументы и (в особенности) понимать чужую речь на родном языке имеет очень большое значение для процесса разработки. А для джуниора - еще более.

    Во-вторых - свой язык программирования. Плюсы знать надо на таком уровне, чтобы не задавать простых вопросов. STL надо знать как букварь, это важный момент. Шаблоны и метапрограммирование - хотябы на общем начальном уровне (синтаксис, возможности, правила, type_traits в STL).
    3 способа использования слова static знаешь? Почему inline нужен? Что такое константный метод? Почему в деструкторе нельзя вызывать виртуальные методы? А как виртуальный метод все же вызвать, если ну очень хочется? Каким условиям для хеш-функции желательно удовлетворять чтобы эффективно использовать ее в контейнере std::unordered_map? Как правильно мириться с исключениями конструктора? Чем std::deque отличается от std::vector, в каких случаях что эффективнее? Перечислять вопросы можно хоть до второго пришествия.

    В третьих - английский язык. Нужно уметь читать документации и доклады, стенографии выступлений и, если понадобится, общаться с сообществом на гитхабе, гиттере, слеке. С ресурсом en.cppreference.com/w нужно не просто подружиться, надо знать что именно там есть все ответы на твои вопросы по языку.

    Штука такая, джуниор без знаний языка мало кому нужен, таких на грош с десяток взять можно. Когда с самого старта карьеры ты уже будешь уверенно владеть языком программирования, к тебе и отношение другое будет. И рост у тебя будет быстрее, и знания тебе с самого начала будут по другому предоставлять.

    А основная мысль у меня такая: как джуниора, тебя не азам обращения с инструментами должны учить, а сразу передавать тебе наработанную сноровку, алгоритмы, рассказывать про грабли и минные поля.