Ответы пользователя по тегу C++
  • Утечка памяти gdiplus?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что я должен удалять или очищать и как я должен это делать?

    MSDN говорит, что у каждого GdiplusStartup должен быть парный вызов GdiplusShutdown.
    Ответ написан
    1 комментарий
  • Где найти такую CLI?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Хочется как-то отойти от указания всех параметров а считать что есть некий контекст.

    Я вот так делаю в подобных случаях. Т.е. загружаю конфигурацию из конфиг-файла если он есть, а потом поверх неё -- из параметров командной строки. Среди которых могут быть другие конфиг-файлы.
    Ответ написан
    Комментировать
  • Пробую собрать bmminer-cgminer492, ошибка при сборке. Каких зависимостей не хватает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    получаю следующую ошибку

    судя по тексту ошибок, всего хватает, но ошибки в коде. Я бы в cgminer.c добавил #include <inttypes.h>
    Ответ написан
    Комментировать
  • Генерация паролей на c++ Не могу понять в чем проблема?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    std::pow(alphabet.length(), password_length);

    82 в десятой степени -- это 0xbebf59a0_7dab4400, т.е. это число уже не влезает в 64-битный long long int. Вам нужно придумать другой способ считать пароли.
    Ответ написан
    Комментировать
  • Как исправить вывод матрицы С++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    при замене почему то предпоследний элемент строки и столбца заменяется на случайное число из матрицы

    не на случайное же, а поскольку строка пересекается с заменяемым столбцом, то на тот элемент, который был из строки скопирован в столбец ранее.

    Можно пофиксить например так:

    void replaceColumn(int** matrix, int size) {
        int maxRow = 0;
        int maxElement = 0;
        int copy;
    
        // Находим строку с максимальным элементом
        for (int i = 0; i < size; ++i) {
            for (int j = 0; j < size; ++j) {
                if (matrix[i][j] > maxElement) {
                    maxElement = matrix[i][j];
                    maxRow = i;
                }
            }
        }
    
        copy = matrix[maxRow][size - 2];
        // Заменяем предпоследний столбец найденной строки
        for (int i = 0; i < size; i++) {
            matrix[i][size - 2] = (i == size - 2) ? copy : matrix[maxRow][i];
        }
    
    }
    Ответ написан
  • Как собрать приложение на языке программирования C++, используя CMake?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как мне организовать систему сборки, чтобы любой пользователь мог запустить приложения, имея .exe файл и папку data ( aka DATA_DIR )

    Для этого нужно научить приложение находить папку data. Сейчас ты, похоже, используешь полный путь из DATA_DIR. Возможно ты хочешь искать data относительно положения исполняемого файла. Это должно быть в логике приложения, я не вижу, как тебе может помочь система сборки, если пользователи не будут пересобирать приложение.
    Ответ написан
    4 комментария
  • Как экспортировать экземпляр класса из DLL при LoadLibrary?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я вижу проблему в определении класса module::module. Ты хранишь экземпляры этого класса в векторе, но у него нет конструкторов копирования и операторов присваивания. А это значит, что созданный здесь временный объект module::module будет там же и разрушен с вызовом FreeLibrary и потерей актуальности всех статических указателей в модуле который был загружен. Среди которых будут указатели на таблицы виртуальных функций для классов определённых в этом модуле.
    Ответ написан
    4 комментария
  • Работа с рисованием в Qt. Почему не получается рисовать после оператора if?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не нужно делать setChecked(false) в обработчике paintEvent, потому что paintEvent случается довольно таки асинхронно по отношению к событиям генерируемым UI.
    Ответ написан
    1 комментарий
  • Как это можно пофиксить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как это можно пофиксить?

    Можно внести поле SDL_RendererRenderer в структуру struct structTile.
    Ответ написан
    Комментировать
  • Какие минимальные знания С++ должны быть, чтобы начать изучать Unreal Engine 5?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что мне стоит делать дальше?

    Изучать обе параллельно.

    какие минимальные знания С++ должны быть, чтобы начать изучать Unreal Engine 5

    Понимание синтаксиса и способность читать документацию.
    Ответ написан
    Комментировать
  • Как работает данный алгоритм проверки числа на простоту и какой у него Big O??

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как работает данный алгоритм проверки числа на простоту

    Данный алгоритм работает неправильно, первая ошибка состоит в том, что происходит обращение к неинициализированным элементам массива a.
    Ответ написан
    Комментировать
  • Как реализован внутри std::tm?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем тут фокус?

    Нет никакого фокуса. std::tm -- это завёрнутая в namespace std struct tm, древняя структура из чистого C.
    Ответ написан
  • Как быстро округлить timestamp до секунд, минут, часов, дней и т.д.?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я думаю, что пара gmtime + timegm -- это простое, понятное, сравнительно портабельное и довольно быстрое решение:
    #include <time.h>
    
    enum time_floor_level {
        YEAR, MONTH, DAY, HOUR, MINUTE,
    };
    
    time_t time_floor(time_t t, enum time_floor_level level)
    {
        struct tm tm;
    
        gmtime_r(&t, &tm);
    
        switch (level) {
        case YEAR:
            tm.tm_mon = 0;
        case MONTH:
            tm.tm_mday = 1;
        case DAY:
            tm.tm_hour = 0;
        case HOUR:
            tm.tm_min = 0;
        case MINUTE:
            tm.tm_sec = 0;
        }
        return timegm(&tm);
    }
    Ответ написан
    Комментировать
  • Что означает ошибка "Error: relocation ... cannot be used with -shared"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что означает ошибка «Error: relocation ... cannot be used with -shared»

    Эта ошибка значает, что такой объектник содержит код, работа которого зависит от адреса по которому он будет размещён. Так называемый position-dependent code. Альтернатива -- position-independent code, такой, который выполняется одинаково, независимо от адреса, а все данные и константы, которые зависят от адреса, если таковые есть, вынесены из кода в отдельный изменяемый сегмент. Такой код генерируется компилятором если его вызывать с правильным флагом (например gcc -fpic). Из-за того что динамические библиотеки могут быть загружены в процесс по любому адресу существует требование, что код в них должен быть position-independent. Поэтому объектники скомпилированные как position-dependent обычно не могут быть слинкованы в динамическую библиотеку.

    В данном случае запись о релокации с типом R_AARCH64_TLSLE_ADD_TPREL_HI12 говорит (частью TLSLE, где LE означает Local Executable) о том, что код объектника в котором она находится был намеренно собран с рассчётом на то, что объектник будет частью исполняемого файла, а не динамической библиотеки. Здесь можно почитать об отличиях моделей адресации TLS, в частности о модели Local Exec в разделе 4.4.
    Ответ написан
    Комментировать
  • Почему возникает проблемы при закрытие файла в C++ с использованием std.io?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему возникает проблемы при закрытие файла

    Почему ты решил, что при закрытии? Сообщение явно приходит из реализации fwrite.

    Ошибка вызвана тем, что в функцию fwrite передаётся NULL в качестве указателя на FILE. Для предотвращения этой ошибки нужно проверять, что файл был успешно открыт перед тем как читать из него или писать в него.
    Ответ написан
  • Почему цикл в C++ застревает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Больших отличий я не заметил


    Я удалил неважные части кода, чтобы большое отличие стало более заметно. Вот что получилось из твоего кода:
    while (num_bor_1 <= num_bor_2)
      {
        if ((num_bor_1 % 2) != 1)
        {
          num_bor_1++;
        }
      }


    А вот что получилось из решения:
    do
      {
        num_bor_1++;
      } while (num_bor_1 < num_bor_2);
    Ответ написан
    Комментировать
  • Почему возникает free(): double free detected in tcache 2? (в деструкторе)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему возникает free(): double free detected

    Потому что в этом классе не реализован конструктор копирования (а так же перемещения и операторы присваивания, но это пока не вызывает таких же ошибок). В результате при копировании объекта класса String копия получает то же значение str что и оригинал с которого она скопирована, в деструкторе копия удаляет str оригинала, а потом это же делает оригинал в своём деструкторе. См. правило трёх/пяти.
    Ответ написан
    Комментировать
  • Можно ли как то скачать URL сайта сразу в переменную?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Можно заменить URLDownloadToFileA на URLOpenBlockingStream и читать данные из интерфейса IStream который возвращает эта функция.
    Ответ написан
    3 комментария
  • Как правильно считать значение из бинарного файла C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    third = string(buffer1);
    fourth = string(buffer2);

    Должно быть
    third = string(buffer1, size3);
    fourth = string(buffer2, size4);

    поскольку строки прочитанные в buffer1 и buffer2 не 0-терминированные.

    И отдельно
    char buffer1[size3];

    char buffer2[size4];

    это не по стандарту С++, компилируется и работает только из-за расширений GNU.
    Ответ написан
    5 комментариев
  • Почему выводятся не те символы, которые прописаны в коде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    wcout << endl << "Результат: " << encrypt(s);

    ты потерял L перед "Результат" и выводишь в wcout обычную строку.

    А перед этим выводишь в cout. Приведи всё к выводу в wcout.

    Стандарт C++ об этом говорит вот что:
    Mixing operations on corresponding wide- and narrow-character streams follows the same semantics as mixing such operations on FILEs, as specified in the C standard library.

    А стандарт С в свою очередь говорит вот что (C11 7.21.2:4):

    Each stream has an orientation. After a stream is associated with an external file, but
    before any operations are performed on it, the stream is without orientation. Once a wide
    character input/output function has been applied to a stream without orientation, the
    stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
    been applied to a stream without orientation, the stream becomes a byte-oriented stream.
    Only a call to the freopen function or the fwide function can otherwise alter the
    orientation of a stream. (A successful call to freopen removes any orientation.)

    Byte input/output functions shall not be applied to a wide-oriented stream and wide
    character input/output functions shall not be applied to a byte-oriented stream.
    Ответ написан
    7 комментариев