Задать вопрос
Ответы пользователя по тегу C++
  • С++ как проверить, что функции delete,free не заботятся о физической очистке памяти после удаления?

    @res2001
    Developer, ex-admin
    Видимо вы имеете ввиду происходит ли фактическое освобождение памяти на уровне операционной системы при вызове delete и free?
    Не обязательно. В стандартной библиотеке есть свой менеджер памяти интерфейсом к которому являются new/delete/malloc/free. У этого менеджера памяти какой-то свой алгоритм работы и он не обязательно при каждом вызове запрашивает/возвращает память ОС. На сколько я знаю в стандарте никак не регламентируется этот вопрос, поэтому поведение менеджера памяти - целиком на совести разработчика стандартной библиотеки для вашего компилятора.
    Более того стандартный менеджер памяти можно заменить другим, они есть уже готовые. Можете написать свой собственный, такой как вам нужно.
    Если вы хотите построить на поведении стандартного менеджера памяти какую-то логику приложения, то не стоит этого делать, т.к. в следующей версии вашего компилятора реализация менеджера памяти может быть другая.
    Вообще не нужно приписывать дополнительный функционал стандартной библиотеке. Воспринимайте все что написано в стандарте буквально и ничего от себя не добавляйте.
    Ответ написан
    Комментировать
  • Особености функций malloc/calloc/new?

    @res2001
    Developer, ex-admin
    А вы документации не доверяете что ли?
    Забивает память нулями только calloc, о чем в доке написано.
    Проверено неоднократно.
    Чтоб проверить выделите массив intов, например побольше - несколько мегабайт, и ищите в нем не нулевые значения. Уверен, долго искать не придется.
    Ответ написан
    Комментировать
  • Как оптимизировать программу на с++?

    @res2001
    Developer, ex-admin
    Само решение задачи оптимизировать бесполезно, т.к. тут на столько все просто, что любые оптимизации дадут прирост в 1-2 процессорных инструкции, а это в любом случае будет меньше 1 млсек.
    Попробуйте исполнить ваш тест несколько раз и вычислить среднее время, если это возможно.
    Или вставьте в свою программу вычисление времени выполнения и больше не беспокойтесь по этому поводу: www.cplusplus.com/reference/ctime/clock/?kw=clock
    Ответ написан
    Комментировать
  • С какой книге по c++ рассказывается о создании библиотек(dll,so)?

    @res2001
    Developer, ex-admin
    По большому счету, создание библиотек отличается от создания исполняемого файла опцией компилятора.
    Ну и в библиотеке не нужно делать main, т.к. он находится в вызывающей библиотечные функции программе.
    Ответ написан
    Комментировать
  • Какова судьба MFC и C++?

    @res2001
    Developer, ex-admin
    С/С++ не выйдут из моды еще долго, у них своя область применения и там они практически вне конкуренции.
    MFC - не стоит тратить на нее время. Она уже 20 лет назад была похожа на неповоротливого монстра, не думаю, что с тех пор что-то изменилось в лучшую сторону. К тому же привязка к одной платформе и одному компилятору, в наше время - это большой минус. И, кстати, на сколько я знаю, в бесплатных версиях VS MFC нет.
    Ответ написан
    Комментировать
  • Как происходит линковка приложений?

    @res2001
    Developer, ex-admin
    1.обычно у каждого компилятора свой runtime. Для VC - это разные версии msvcrt.dll.
    2.Читайте на сайте разработчика компилятора. В основном это не сильно принципиально, разве что вы используете какие-то специфические плюшки, которые не описаны в стандарте, но есть в конкретном компиляторе и его стандартной библиотеке.
    3.runtime - это как правило стандартная библиотека + точка входа и завершения программы (а ваш main вызывается уже из runtime).
    4.Можно. Обычно стандартная библиотека поставляется как в виде динамической библиотеки, так и статической. Выбор какую использовать за вами, задается опциями компилятора.
    5.Не большой. Но тут лучше говорить не про оверхед, а про "написание программы на чистом" WinAPI/POSIX и других OS API. На сколько это трудозатратней по сравнению с использованием стандартной библиотеки.
    По собственному опыту скажу, что написание на чистом WinAPI довольно трудозатратное (и время затратное) занятие, затратнее примерно в 1.5 по сравнению использованием stdlib. Но у меня это был первый и пока единственный опыт, дальше, видимо должно быть проще.
    Ответ написан
    2 комментария
  • Как обновлять TCP сервер с подключенными клиентами?

    @res2001
    Developer, ex-admin
    Как в nginx - запускается вторая копия процесса уже обновленного, которая принимает новые соединения, а старые дообрабатывает старый. Старый, конечно, должен при этом закрыть слушающий сокет.
    Когда все соединения обработает, он сам завершается. Механизм сложный в реализации, но тут простого и не будет.

    Еще где-то видел такой подход : слушающий процесс и обработчики реализованы в отдельных библиотеках как плагины. Плагины можно загружать и выгружать на лету. При таком механизме становится довольно удобно обновлять приложение - можно обновлять только плагин.
    Ответ написан
    4 комментария
  • Можно ли сделать массив меток goto?

    @res2001
    Developer, ex-admin
    Возможно setjmp/longjmp это то что вам нужно?
    Ответ написан
    Комментировать
  • Corecrt.h file not found - Как решить?

    @res2001
    Developer, ex-admin
    Вы в тегах ставите Visual Studio, а компилируете gcc?
    Видимо, вы пытаетесь собрать свой хеловорд с помощью mingw?
    Тогда запустите сначала оболочку mingw - она обычно запускается стартовыми скриптами: "MinGW-w64 Win64 Shell" и такой же для x32 версии.
    Оттуда и компилируйте, а не из командной строки винды.
    Ответ написан
  • Не могу использовать функции из .c файла, хотя она объявлена в .h файле. что делать?

    @res2001
    Developer, ex-admin
    Не нужно в включать gd_filter.c!
    Просто добавьте его к компиляции:
    gcc CPPImageCorrector.cpp gd_filter.c -o CPPImageCorrector.exe -lgd.dll
    Ответ написан
    Комментировать
  • Как сделать разные цели в одном makefile?

    @res2001
    Developer, ex-admin
    Ну и сделайте так:
    ud-button:
    PROJECT_SOURCEFILES += ud-dag_node.c 
    DEFINES+=PROJECT_CONF_H=\"ud-button.project-conf.h\"
    CONTIKI = ../..
    CONTIKI_WITH_IPV6 = 1
    include $(CONTIKI)/Makefile.include
    
    ud-rpl_root:
    PROJECT_SOURCEFILES += 
    DEFINES+=PROJECT_CONF_H=\"ud-rpl_root.project-conf.h\"
    CONTIKI = ../..
    CONTIKI_WITH_IPV6 = 1
    include $(CONTIKI)/Makefile.include

    make запускать соответственно:
    make ud-rpl_root
    или
    make ud-button

    А для цели all можно написать так:
    all: ud-button ud-rpl_root
    Ответ написан
  • Почему Qt creator выводит ошибку?

    @res2001
    Developer, ex-admin
    Может потому что вы пытаетесь скормить компилятору С++ код на питоне?
    Ответ написан
  • Как быть с отладкой внутренностей Qt?

    @res2001
    Developer, ex-admin
    Откомпилируйте себе версию с отладочной информацией и наслаждайтесь полноценной отладкой.
    Ответ написан
    Комментировать
  • Как решить задачу с массивом NxN?

    @res2001
    Developer, ex-admin
    0.Оформление кода жуткое, не читабельно совсем.
    1.Выделяйте память сразу для всего массива размером b*c - не зачем дробить каждую строку. Обычно динамическое выделение памяти достаточно дорогостоящая процедура (сейчас то вам это не принципиально).
    2.Забудьте про оператор goto. Единственное место, где его оправданно использовать это выход из глубоких вложенных if или циклов, но даже это можно решить другими способами, правда обычно более затратно, чем goto. В данном случае у вас он используется правильно, но ведь есть break для вашего случая, а это гораздо лучше, чем goto.
    3.В общем и целом у вас почти все верно. Но:
    Строка 80 явно лишняя:
    int g[i];
    Т.к. вы объявляете g[] выше. И кстати выше (в 71 строке) объявляете его не правильно, т.к. переменной e не присвоено никакое значение к моменту ее использования.
    4.В последнем цикле вы видимо пытались сделать сортировку - не получилось. Попробуйте еще раз. И нужно сначала отсортировать, а потом вывести. По другому не получится.
    Возможно вам придется сделать g[] не массивом intов, а массивом структур, где в каждой структуре будет содержаться "сумма четных отрицательных элементов каждой строки" и в другом элементе структуры - индекс строки. Сортировать нужно будет массив структур по сумме.
    5.Про остальное писать не буду, т.к. на решение задачи не влияет.

    Желаю удачи!
    Ответ написан
    6 комментариев
  • TCP/IP: что делать, если в процессе чтения сервером пакета от клиента пропадает интернет?

    @res2001
    Developer, ex-admin
    В общем целиком поддерживаю Smithson и Олег Цилюрик
    Проверяйте коды ошибок, возвращаемые методами передачи/приема. При работе с сетью всегда нужно закладываться на то, что передача или прием пройдет с ошибкой или будут приняты/переданы не все данные.
    Т.е. фактически вы должны писать программу исходя из того что ошибки приема/передачи не то что возможны, а они точно будут всегда.
    И да, кастомные keep-alive для TCP - это полная фигня - в протоколе уже все реализовано.
    Ответ написан
    5 комментариев
  • Переопределить operator() для получения доступа к члену класса?

    @res2001
    Developer, ex-admin
    Может вас устроит наследование вашего Window от Graphics?
    Эффект от наследования точно такой какой вы хотите получить другими способами.
    Ответ написан
  • Как посчитать сумму с помощью thread?

    @res2001
    Developer, ex-admin
    Вы в каждом потоке считаете полную сумму, а надо в каждый поток передавать свой диапазон n0-n1, отличный от других. И избавьтесь от мьютексов - выделите для каждого потока свое место куда он будет складывать сумму. Это намного увеличит производительность. После того как все потоки отработают в главном останется только сложить суммы.
    Кстати, можете посмотреть в сторону OpenMP - эта библиотека для подобных задач хорошо подходит.
    Ответ написан
    2 комментария
  • Как повысить свои навыки программирования на С/С++?

    @res2001
    Developer, ex-admin
    Найдите работу программистом. В коллективе и на реальной задаче гораздо быстрее оттачиваются навыки.
    Ответ написан
    Комментировать
  • Можно ли написать в Microsoft Visual Studio 2015 на языке C без C++?

    @res2001
    Developer, ex-admin
    Есть соответствующий параметр в настройках проекта: С/С++ -> Advanced -> Compile As (параметры компилятора /TP или /TC).
    Ответ написан
    Комментировать
  • Как быстро разобратся в сишном коде?

    @res2001
    Developer, ex-admin
    Начните разбираться в коде, уже через неделю другую плотной работы станете довольно бегло понимать что пытался сказать разработчик своим кодом.
    Си сам по себе очень простой язык, самая сложная вещь в нем - указатели, стоит что-нибудь почитать на эту тему, все остальное не сильно отличается от других языков.
    Соберите софт с отладочной информацией и погоняйте под отладчиком, обычно отладчик выдает сообщения про утечки памяти при завершении программы, это может дать толчок для поиска мест где возможны утечки.
    Так же можно воспользоваться каким-либо анализатором кода. Но там, скорее всего, будет много второстепенных ошибок и из всего их обилия придется долго и нудно выделять те что действительно важны на данном этапе.
    Ответ написан
    Комментировать