DEATH2298, Вы когда-нибудь в деструкторе уничтожали память выделенную для этого же объекта? Не уничтожали, потому что объект и деструктор не могут знать как именно для объекта выделена память: объект находится в стеке или в динамической памяти. Память занимаемая объектом всегда уничтожается вне объекта, так же как и выделяется. В деструкторе вы можете уничтожить память, занимаемую членами данных объекта, но не самим объектом.
Для данной конкретной ОС и настроек компилятора по значению this можно предположить где выделена память, но в общем случае - нет. Кроме того, память может быть выделена не для одного объекта (деструктор которого вызван), а для массива объектов. Что вы будете освобождать в этом случае?
Поэтому вызов деструктора в delete здесь не к месту упомянут. И да, в С++ используется именно delete потому что на нем завязана дополнительная функциональность по вызову деструктора.
Да, free просто освобождает память.
Вызов realloc в вашем примере освободит память выделенную для х и вернет нулевой указатель.
Есть некоторое количество разных реализаций менеджеров памяти, которые по разному реализуют malloc/free. В своем проекте вы можете использовать сторонний менеджер памяти, а не тот что предлагается по умолчанию. Кроме того в ОС есть собственный менеджер памяти и можно использовать его. В винде это функции LocalAlloc/LocalFree и еще пачка других.
Я сегодня получил свежие обновления для defenderа, возможно в нем забанили торрент :-)
ПКМ на иконке дефендера в трее -> Open -> Virus & Threat protection -> Virus & Threat protection settings -> Add or remove exclusion
У меня английская винда.
Антон Антонов, первый и последний адрес подсети не используйте.
В последней сети маска то же 255.255.255.192, видимо?
В целом маски и диапазоны правильные, если разрешена маршрутизация на шлюзах, то все должно работать. Еще фаервол может блокировать трафик, для настройки фаеволы лучше выключить.
в случае присваивания
char * str = "hello";
присваивается только адрес строки, но не сама строка.
В случае массива - выделяется память для массива в стеке и элементам массива присваиваются элементы строки.
evg_96, Нет, не эквивалентен.
Указатель так и останется указателем и указывать он будет на память только для чтения.
Указатель - это такой же тип данных как и все остальные, если грубо, то это целое без знаковое число, размер его зависит от платформы: для х32 - указатели 32 битные, для х64 - 64 битные.
Когда вы пишите:
char * str = "hello";
То в стеке выделяется память для указателя, ему присваивается адрес константной строки. Вообще компилятор должен был бы ругнуться на такое присваивание (возможно надо выставить уровень предупреждений по больше). В этом случае правильней было бы str определить так:
const char * str = "hello";
lightalex, Многие приложения не возможно запустить 2 раза в рамках одной ОС из-за архитектуры этих приложений (например они создают какой-либо именованный глобальный ресурс (файл, pipe, сокет, shared memory, ...) и второй экземпляр приложения уже не может этот ресурс создать).
Да вы правы: RDP менее требователен к ресурсам, чем виртуализация.
И вы не правы в том, что
это должно довольно легко решаться
Некоторые вопросы легко не решаются без разработчиков приложения, но даже если разработчики доступны для контакта они не всегда захотят удовлетворять ваши хотелки за бесплатно.
В вашей конкретной ситуации нужно рассматривать каждое приложение отдельно (ищите замену приложения, ищите причину такого поведения, есть ли варианты обхода, доступны ли разработчики, можно с ними пообщаться на предмет решения проблемы), по скайпу вам уже подсказали решение. Универсальные решения вашего вопроса я описал в предыдущем посте. Примите это и выберите наиболее удовлетворяющий вас вариант.
Я бы на вашем месте оставался на RDP а вопросы с проблемными приложениями разруливал по отдельности. Я думаю, что таких приложений не так что бы много.
Михаил Лялин, Можно проверку добавить.
Переменная dirfiles используется как фильтр файлов в команде dirю
Инициализируйте ее, например так:
set "dirfiles=c:\temp\*_2018-0?0?-??????.*"
ky0, индексы не разрастаются? Суммарный объем индексов будет точно таким же как с единственной таблицей. Поиск по небольшой таблице будет, конечно, быстрее, но не на много.
А если вам потребуется сделать выборку за несколько дней?
Короче, есть свои плюсы, но минусы, по моему, перевешивают эти плюсы с лихвой. Чтоб использовать такую схему БД нужно, что бы приложение подходило к подобной схеме. Wintelex, кстати, из моего примера вполне подходит - там никогда из программы не делались выборки одновременно за несколько дней. Но разрабы не учли ограничение движка БД.
Ingernirated, Да. CGI снимает с обработчика проблему сетевого взаимодействия, которая лежит на веб-сервере. И как правильно писал vaut для многих интерпретаторов сейчас реализованы модули для веб-серверов и они уже не используют CGI. Вот нашел популярную статью на эту тему.
ky0, Я не путаю. Я нигде не говорил, что это был PostgreSQL. Это был MS Access. Просто в том софте использовали подобный порочный подход к генерации таблиц, привел чисто для примера того, что бывает если так делать. Если что софт wintelex разработчик www.alfatelex.ru
На самом деле, тут проблема даже не в том, что движок СУБД отказался работать с БД. А проблема в подобном принципе организации структуры БД.
Ingernirated, Вы не на сервере напишете обработчик. Сервер в данном случае - это веб-сервер (apache, nginx, ...). Вы напишете обработчик, например на php. Вот интерпретатор php и является CGI "клиентом". А ваш скрипт - это только часть "клиента", которая собственно в самом протоколе CGI не участвует, она получает подготовленные php данные запроса (полученные по CGI) и отдает интерпретатору сформированный ответ. Интрепретатор уже сам отдает ответ по протоколу CGI веб-серверу.
На самом деле протокол CGI простой - на стандартный ввод поступает запрос, на стандартный вывод ответ. Но вы в своем скрипте не занимаетесь парсингом стандартного ввода - это делает интерпретатор за вас...
Вам нужен именно вход пользователя?
Что даст вам вход пользователя, если реального человека не будет за компом?
Обычно достаточно запустить соответствующее задание от нужного пользователя - это настраивается при создании задания.
Для данной конкретной ОС и настроек компилятора по значению this можно предположить где выделена память, но в общем случае - нет. Кроме того, память может быть выделена не для одного объекта (деструктор которого вызван), а для массива объектов. Что вы будете освобождать в этом случае?
Поэтому вызов деструктора в delete здесь не к месту упомянут. И да, в С++ используется именно delete потому что на нем завязана дополнительная функциональность по вызову деструктора.
Да, free просто освобождает память.
Вызов realloc в вашем примере освободит память выделенную для х и вернет нулевой указатель.
Есть некоторое количество разных реализаций менеджеров памяти, которые по разному реализуют malloc/free. В своем проекте вы можете использовать сторонний менеджер памяти, а не тот что предлагается по умолчанию. Кроме того в ОС есть собственный менеджер памяти и можно использовать его. В винде это функции LocalAlloc/LocalFree и еще пачка других.