Ответы пользователя по тегу C++
  • Как настроить Visual Studio для отладки драйвера (kernel-mode)?

    slinkinone
    @slinkinone Автор вопроса
    Агент "Везде успеть"
    Судя по всему, поблема кроется в сообщение:
    This feature is not available in Windows 10, version 1507 and later versions of the WDK.

    Т.к. Windows стоит гораздо новее, полагаю именно поэтому не получилось подсосаться через VS2017 к VM.
    Вопрос на SOCIAL.MSDN оп этой проблеме.
    Ответ написан
    Комментировать
  • Как подключить скачанную библиотеку?

    slinkinone
    @slinkinone
    Агент "Везде успеть"
    Я так полагаю, что вы имели в виду кейс с либами, которые ставятся не через пакетный менеджер. Рассмотрим случай для библиотеки, стянутой с github-а например. Для того, чтобы подключить либу, вам надо её скачать и собрать у себя на машине. После сборки, в папке с либой будут файлы с расширением .a и папка, в которой хранятся заголовочные файлы (.h). При компиляции вам надо будет указать ключи, чтобы указать компилятору где у вас лежат заголовочники и либы, которые используются в вашем проекте.
    Например:
    g++ -std=c++11 -I/home/username/github_libs/libname/include -L/home/username/github_libs/libname/lib main.cpp -lLibName


    UPD0: Сорри. Уже после ответа увидел тег "Windows".
    Ответ написан
    Комментировать
  • Что происходит с переменной / указателем в памяти после его обнуления?

    slinkinone
    @slinkinone
    Агент "Везде успеть"
    Обычно говорят конструктор копирования, но это так, к слову.
    1. Ответ на ваш вопрос. Переменная size примет значение other.size, *element примет значение *other.element (как указатель). Причем после вызова конструктора объект other изменится, т.к. он передаётся по адресу.
    2. Это неправильная реализация - вы же копируете. Объект other не должен изменяться. И для указателя a2 нужно копировать не значения указателя, а значения, которые хранятся по этому указателю. Иначе у вас получится так, что члены двух классов ссылаются на одну и туже область памяти и могут её менять. Т.е. если по указателю a1.element изменятся значения, то они изменятся и в a2. Нужно при копировании сначала освободить всю память *element, затем выделить заново под нужный размер, и уже потом скопировать значения в эту область.
    Ответ написан
  • Практический задачник по С++?

    slinkinone
    @slinkinone
    Агент "Везде успеть"
    Ответ написан
    Комментировать
  • Как добраться до элемента в векторе векторов C++?

    slinkinone
    @slinkinone
    Агент "Везде успеть"
    Не совсем к вопросу, но будьте окуратнее в работе с векторами, если часто происходят операции вставки...
    Вот хорошая статья:
    artlang.net/article/view/4
    Ответ написан
    Комментировать
  • Как считать строки в массив?

    slinkinone
    @slinkinone
    Агент "Везде успеть"
    Нужно выделять память под str перед считыванием...
    Представьте что у вас есть переменная типа указатель, но чтобы начать писать по этому указателю, необходимо выделить память...А при << программа пытается перенести всё из in в область, на которую указывает str...Но т.к. под str ничего не выделено, программа пишет в область, которая возможно не предназначена для записи и может испортить данные кучи...
    Ответ написан
    Комментировать
  • Что представляет собой ссылка?

    slinkinone
    @slinkinone
    Агент "Везде успеть"
    Допустим имеем такой код:
    int a = 5; // это переменная а = 5 (допустим по адресу 0x333333)
    // она хранится в памяти в какой-то ячейке и у этой ячеки есть свой номер
    // и чтобы узнать этот номер надо к переменной "а" применить "&" - это адрес или ссылка
    // а указатель специальный тип для хранения адреса переменной и объявляется так
    int* ptrA = &a;
    // указатель должен быть сразу проинициализирован
    // теперь ptrA = 0x333333
    // *ptrA = 5; - мы разименовали адрес хранящийся в переменной ptrA... Сказали процессору получить знвчение по адресу что в ptrA
    Ответ написан
    Комментировать
  • Как преобразовать определенные биты в числе?

    slinkinone
    @slinkinone
    Агент "Везде успеть"
    Можно взять единицу (var1 = 00000001), применить | (битовое или), то получим 1 в первом бите, побитовый сдвиг влево к var1 - получим (00000010) и также применим | к нужному числу.

    Очень хорошая статья:
    chipenable.ru/index.php/programming-avr/item/4-uch...
    Ответ написан
    1 комментарий