Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Переходим на https. Просьба писать обо всех замеченных неисправностях.
  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
Страниц: [1] 2 3 4 ... 10
 1 
 : Сегодня в 06:45 
Автор Алексей++ - Последний ответ от Алексей++
Finch, нет, останавливается именно там, где я показал. С max_size тут не то. В реализации

Код: (C++)
      max_size() const _GLIBCXX_USE_NOEXCEPT
      { return size_t(-1) / sizeof(_Tp); }

то есть, нет проверки на недостаточность памяти (ведь память занимает не только этот контейнер)

и тест подтверждает, что это не работает

Код: (C++)
std::map<uint64_t,TYPE> cont;
while(1)
{
        try
        {
                if(cont.size()==cont.max_size())
                {
                        break;//сюда НЕ попадаем
                }
                else
                {
                        cont[cont.size()]=TYPE();
                }
        }
        catch(...)
        {
                int iii=1;//не попадаем!
        }
}



Добавлено через 43 секунды:
короче, я так понимаю, надо переходить к вектору, с мапом каши не сваришь Улыбаюсь

 2 
 : Сегодня в 06:10 
Автор Алексей++ - Последний ответ от Finch
Я думаю, что останавливается все таки тут
Код: (C++)
 std::__throw_bad_alloc();
там и подсказка Улыбаюсь Хочеш ловить, сам проверяй на max_size

 3 
 : Сегодня в 06:00 
Автор Алексей++ - Последний ответ от Алексей++
Леш, я не понял, какое исключение ты ловишь? std::bad_alloc?
ещё пока не знаю. Любое, мне надо поймать невозможность вставки, чтобы приложение не упало. Я думал, есть какое-то общее решение Улыбаюсь

Finch, я пробую в QtCreator, отладчик gdb

останавливается тут
//new_allocator.h
Код: (C++)
      // NB: __n is permitted to be 0.  The C++ standard says nothing
      // about what the return value is when __n == 0.
      pointer
      allocate(size_type __n, const void* = 0)
      {
        if (__n > this->max_size())
          std::__throw_bad_alloc();

тут==>       return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
      }

в консоли видно только
Invalid parameter passed to C runtime function.

в общем, ничего определённого


 4 
 : Сегодня в 05:11 
Автор Алексей++ - Последний ответ от Finch
Опероатор new опционально бросает исключение. Зависит от конкретной реализации std. Вот например, есть с noexcept и есть с throw.
Код: (C++)
//C++98
throwing (1) void* operator new (std::size_t size) throw (std::bad_alloc);
nothrow (2) void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();
placement (3) void* operator new (std::size_t size, void* ptr) throw();

//C++11
throwing (1) void* operator new (std::size_t size);
nothrow (2) void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
placement (3) void* operator new (std::size_t size, void* ptr) noexcept;
Без ловли исключения, какое сообщение тестовый код бросает в консоль?

 5 
 : Вчера в 20:02 
Автор Алексей++ - Последний ответ от RXL
Леш, я не понял, какое исключение ты ловишь? std::bad_alloc?

 6 
 : Вчера в 08:54 
Автор Алексей++ - Последний ответ от Алексей++
пробую поймать исключение для ситуации, когда пытаются впихнуть невпихуемое

для вектора получается
Код: (C++)
std::vector<TYPE> cont;
while(1)
{
        try
        {
                cont.push_back(TYPE());
        }
        catch(...)
        {
                int iii=1;//попадаем
        }
}

для мапы - не получается. В дебаггере остановка происходит при очередном вызове new где-то в глубинах реализации
Код: (C++)
std::map<uint32_t,TYPE> cont;
while(1)
{
        try
        {
                cont[cont.size()]=TYPE();
        }
        catch(...)
        {
                int iii=1;//не попадаем!
        }
}

у кутешных QVector и QMap(QHash) - поведение аналогичное

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

 7 
 : 16-11-2017 07:31 
Автор IgelImNebel - Последний ответ от RXL
Помню, уже в 2004-м были трудности поставить 95-ую винду на современное железо тех лет, да и нафиг эта падучая жуть, когда уже был XP. У нас тоже было ПО для настройки мультиплексоров SDH, которое на 98 даже не запускалось. VMWare решило все проблемы. Сегодня систем виртуализации много больше.

 8 
 : 16-11-2017 03:22 
Автор IgelImNebel - Последний ответ от IgelImNebel
Огромное спасибо за подсказки и информацию. На следующей смене поспрашиваю мужиков,  что и как там работает, попробуем запустить с подключением (хотя это они вероятно в первую очередь пробовали).
Насчёт того для дос или нет она -  не знаю.
Но скорее всего не новее 95го ибо внедряют инновации на объект медленно и уже проверенные, дабы 100% работало.
По поводу заказа обновлённого ПО -  компании которая выпускала оборудованип уже давно нет, следовательно и поддержки оного. Так бы не пытались своими силами решить.

Как будут какие-либо новые подробности - напишу.

 9 
 : 15-11-2017 22:58 
Автор IgelImNebel - Последний ответ от Sla
Я так понимаю, что программулина напрямую лезет к адресам порта, миную системные настройки.
А может все же нет?
Если она образца 2000, то там уже и xp была, и 98-ая
А может там вообще crt-шная либа доступа к видео?

 10 
 : 15-11-2017 22:45 
Автор Bart - Последний ответ от RXL
Алгоритм писать не нужно, все давно написано до нас. Нужно лишь правильно применить. Библиотеки существуют именно для этого.

С заданием он, вроде, справился (я не учитель, не не проверял). Главное не задание, а самостоятельность, умение думать и использовать инструменты. И еще понимание, что велосипеды не стоит тащить на работу.

Страниц: [1] 2 3 4 ... 10
Powered by SMF 1.1.21 | SMF © 2015, Simple Machines