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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char *s = new char[strlen(source) + 1];
    ...
    strcpy_s(s, strlen(s), source);


    strlen(s) -- вообще за гранью добра и зла и возвращает случайное число, по большому счёту. Потому что s -- только что выделенный неинициализированный массив.

    Вызов strcpy_s совершенно бессмысленный и неправильный. Бессмысленный, потому что ты только что выделил столько памяти, сколько данных в строке. strcpy_s имеет смысл, если буфер в который ты копируешь -- это массив фиксированной длины. Неправильный, потому что даже если ты имел в виду strlen(source), а не strlen(s), то должен был передать strlen(source) + 1, чтобы было куда 0-терминатор скопировать. Кроме всего прочего, strcpy_s ещё и возвращает код ошибки, который имеет смысл проверить.

    Лучше всего в этом месте было бы вызвать memcpy(s, source, strlen(source) + 1); или вообще выкинуть s = new char [...]; strcpy_s ... delete [] s; и заменить на s = strdup(source); ... free(s);
    Если очень хочется strcpy_s, то хотя бы так: strcpy_s(s, strlen(source) + 1, source);

    Исправление этого места починит и delete, потому что delete валится из-за того, что ты поломал heap.
    Ответ написан
    1 комментарий
  • Как исправить ошибку в коде c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Замени head = malloc(sizeof(struct Node)) на head = new Node.
    Потому что malloc тебе конструктор std::string внутри data_list не вызовет.
    И не вставляй код картинками.
    Ответ написан
    Комментировать
  • Как соединить несколько RaspberryPi через I2C?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    А что делать дальше?

    Дальше надо узнать, что в I2C есть мастера и слейвы и копать куда-то туда.
    Ответ написан
    8 комментариев
  • Sed - как вывести все цифры до первой точки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужно регулярное выражение, для sed, чтобы выводило цифры до первой точки:

    sed 's/\..*//'

    screen -x | grep "_vc" | sed '\Что-то_тут\'

    Можно сделать одним только седом: screen -x | sed -n '/_vc/s/\..*//p'

    И если я потом '| kill' добавлю, так будет работать?

    Нет. kill не читает ничего из стандартного ввода. Если ты хочешь передать эти номера как параметры kill нужно добавить | xargs kill
    Ответ написан
    Комментировать
  • Где найти актуальную версию arm тулчейна?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Видишь ли в чём дело, если ты используешь тулчейн сильно отличный от того, которым собраны библиотеки установленные на устройство, у тебя есть три варианта действий:
    - перестроить и обновить все библиотеки на устройстве.
    - создать отдельную иерархию каталогов /lib, /usr/lib, ... в которые сложить библиотеки (.so) нового тулчейна и тем или иным способом заставить исполняемые файлы собранные новым тулчейном использовать их.
    - линковать свои исполняемые файлы статически.

    В последнем варианте тебе подойдёт почти любой тулчейн, два других варианта -- более замороченные.

    https://elinux.org/Toolchains#Prebuilt_toolchains
    Ответ написан
    Комментировать
  • Преобразование char в const char*?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Имеется строка
    string message = "Hello!";
    Функция принимает const char*, мне нужно передать в неё первый символ этой строки.


    void f(const char *);
    
    string message = "Hello!";
    string message1(1, message[0]);
    f(message1.c_str());
    Ответ написан
  • Как правильно экранировать одиночные кавычки в linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как экранировать одинарные кавычки

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

    Оригинальный запрос можно написать так:
    grep -rnw /home/user/ -e "\$_GET['s']"
    но в любом случае он выглядит проблематично: $ в регулярке -- это конец строки, квадратные скобки -- это символ из набора...
    Ответ написан
    Комментировать
  • Thinstation как добавить xorg7-radeon?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я ничего не знаю про thinstation, но древний драйвер в X11 называется radeonhd, см. https://www.x.org/releases/individual/driver/
    Ответ написан
  • Как передать значение переменной в стек (Ассемблер)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Код может выглядеть как-то так:

    void OutFloat(double v);

    sub sp,16
    mov bp,sp
    fstp qword ptr [bp + 8]
    call OutFloat
    add sp,16


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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужна хотя бы идея как это можно реализовать

    Это можно реализовать функцией qsort. Матрицу хранить по столбцам а не по строкам.
    Ответ написан
    Комментировать
  • Как удалить объект класса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает.

    Тебе предстоит узнать много нового. О том, что такое неопределённое поведение. О том, что удалять опреатором delete можно только объекты созданные оператором new. О том, что обращение к полям объекта после вызова деструктора -- это неопределённое поведение, так же как и вызов деструктора больше чем один раз. О том, что это забота программиста -- следовать правилам языка, а рантайм может закрывать глаза на ошибки, а может громко кричать и завершать программу при первой же возможности.

    Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает. К нему по прежнему можно обратиться и вывести значения xy. При этом по завершению работы программы, в консоль выводится "destruct" второй раз.

    Ну а у меня твоя программа ожидаемо вылетает сразу же в месте вызова delete.

    как правильно уничтожить объект?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    VS пишет...

    в С89 нет complex.h, он появился в C99. VS не поддерживает С99. Следовательно complex.h который у тебя есть -- нестандартный. Надо смотреть в него, чтобы понять, как его использовать.
    (Подозреваю, что надо выкинуть слово double из определений переменных).
    Ответ написан
    Комментировать
  • Как убрать кучу лишних веток в GitHub-репозитории?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Теперь в репозитории куча веток, от которых надо избавиться. Как?

    git push <remote> :<branch-name-1-to-delete> :<branch-name-2-to-delete> ...
    Ответ написан
    2 комментария
  • Как получить доступ к private полям без friend-функций?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Непонятно, в каких отношениях состоят List и Node.

    По-правильному, все поля класса должны быть приватными.

    По-правильному приватные поля должны быть приватными, а те, к которым нужен доступ извне -- публичными или защищёнными.
    Ответ написан
    Комментировать
  • Почему в программе утечка памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Укажите на ошибки в коде

    Можно собрать программу с -g, и valgrind сам тебе укажет с точностью до строчки в исходниках, где была выделена утёкшая память.

    как мне вводить строку с неизвестной длинной?

    char *str = NULL;
    scanf("%m[^\n]", &str);
    Ответ написан
    5 комментариев
  • Как понять причину по которой не устанавливается ssh соединение по ключу?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    куда копать/как дебажить?

    Читать /var/log/auth.log (или куда настроен вывод sshd) на сервере.
    Ответ написан
    1 комментарий
  • Как сделать кросскомпиляцию gcc?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    --build - платформа где будут собираться исходники какой либо программы
    --host - указываем где будет запускаться скомпиленная программа
    --target - а это как я понимаю используется чтобы указать где будет собираться сам GCC?

    Применительно к тулчейну
    - build -- это машина, на которой ты строишь тулчейн. В твоём случае configure сам определит.
    - host -- это машина на которой тулчейн будет выполняться. В твоём случае это то же самое, что build. Можно не указывать.
    - target -- это машина, под которую тулчейн будет генерировать код.

    Я их собрал с опцией (это верно в моем случае?):
    HOST=x86_64-pc-nto-qnx6.5.0

    Похоже на правду.

    Но не просто собрать, а собрать так, чтобы собранный компилятор компилировал исходники под QNX.

    Для этого тебе нужно понять, чем код, сгенерированный под QNX отличается от кода под ту же процессорную архитектуру, но под другую ОС.
    spoiler
    В основном -- библиотекой С.
    Ответ написан
    4 комментария
  • Что представляет собой физический IO ports?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Правильно ли я понимаю

    Правильно.
    Ответ написан
    Комментировать
  • Почему нельзя перегрузить оператор?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    bool& operator [] (int index) {
        return selfVector[index];
      }

    должен стать
    std::vector<bool>::reference operator [] (int index) {
        return selfVector[index];
      }
    Ответ написан
    Комментировать
  • Почему рекурсия вовремя не останавливается?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    При компиляции выдает ошибку

    А на скрине -- отладчик не может найти исходник для функции strcat. Т.е. всё с компиляцией нормально.

    struct SYM* buildTree(struct SYM *psym[], int N)
    ...
    
    void division(struct alphabet *alphabetLetter, int groupCount)
    {
      int psysms[256];
    ...
      psysms[i] = &alphabetLetter[i];
    ...
      struct SYM *root = buildTree(psysms, alphabetLen);
    ...
    }


    Тут происходит что-то фееричное с типами: сначала указатели записываются в массив int, потом этот массив передаётся в buildTree который ожидает совсем другое.
    Ответ написан
    Комментировать