Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
1

Переполнения безопастны?

08.05.2017, 11:59. Просмотров 857. Ответов 13

Насколько безопасна строчка:
C++
1
for(unsigned int b(UINT_MAX); ++b != UINT_MAX;)
или такое нужно писать только так:
C++
1
2
3
unsigned int b(0);
do{/*code*/}
while(b != UINT_MAX)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2017, 11:59
Ответы с готовыми решениями:

Флаг переполнения
Доброго времени суток! Подскажите, как проверить какую-либо определенную...

Защита от переполнения
Ребят помоги создать защиту от переполнения через функцию scanf_s и убрать...

СИ++ и контроль переполнения
Можно ли как-нибудь в VS включить контроль переполнения при математических...

Отслеживание переполнения
Привет. Подскажите пожалуйста как ловить переполнение переменной типа size_t (...

Проверка переполнения double
Добрый день! Подскажите пожалуйста, где можно почитать теорию. Нужно решить...

13
nmcf
08.05.2017, 12:54
  #2

Не по теме:

А зачем так делать?

0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 30
08.05.2017, 14:10 3
Лучший ответ Сообщение было отмечено eXPonent как решение

Решение

Какой смысл ты вкладываешь в слово "безопасны"?
По стандарту именно беззнаковое переполнение вроде бы как определено (т.е. НЕ является undefined behaviour)

Добавлено через 26 секунд
Ну и +1 к вопросу из поста #2
1
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
08.05.2017, 16:28  [ТС] 4
Что бы перебрать все значения:
C++
1
bitset<UINT_MAX> *BoolHash = new bitset<UINT_MAX>();
Добавлено через 47 минут
Я где то слышал (или читал), что для переполнения есть специальный регистр у процессора и если происходит оное, то устанавливается флаг, который можно прочитать и выполнить (в случае переполнения - обход ошибки)
0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,159
Записей в блоге: 30
08.05.2017, 16:54 5
Флаги переполнения есть в машине, в языке это никак не учитывается. Т.е. язык построен так, что если к беззнаковому +дофига прибавить единицу, то получится законный результат 0. При этом факт переполнения никак в языке не отражается, т.е. программист сам должен корячиться и по результату вычислять, было переполнение, или не было
2
Mournful Max
08.05.2017, 17:03
  #6

Не по теме:

Evg, этот код считается валидным?

C
1
2
3
4
5
6
short shrt_max( void )
{
  short i = 0;
  while ( ++i > 0 );
  return --i;
}
Тут же как бы происходит переполнение, или нет?

0
Notoriously
69 / 69 / 35
Регистрация: 06.07.2016
Сообщений: 414
08.05.2017, 17:06 7
Цитата Сообщение от eXPonent Посмотреть сообщение
Переполнения безопастны?
Конечно.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <cmath>
 
int main()
{
  size_t variable = static_cast <size_t> (pow(2,sizeof(size_t) * 8) - 1);
  std :: cout << variable << std :: endl;
  std :: cout << variable + 1 << std :: endl;
}
Особенно, если рядом есть успокоительное, чтобы потом не разбить что-нибудь, поняв, что все пошло крахом из-за вот такого переполнения.
0
Evg
08.05.2017, 17:08
  #8

Не по теме:

Цитата Сообщение от Captain Maxee Посмотреть сообщение
Evg, этот код считается валидным?
Нет, тут знаковый тип. На моей памяти определённым было только беззнаковое переполнение

0
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,803
Записей в блоге: 2
Завершенные тесты: 1
08.05.2017, 21:04 9
У меня у одного возникает вопрос, зачем нужен битсет с таким количеством флагов?
0
nmcf
09.05.2017, 08:50
  #10

Не по теме:

Croessmah, у него всегда так.

0
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
11.05.2017, 17:26  [ТС] 11
Цитата Сообщение от nmcf Посмотреть сообщение
А зачем так делать?
Цитата Сообщение от Evg Посмотреть сообщение
Ну и +1 к вопросу из поста #2
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня у одного возникает вопрос, зачем нужен битсет с таким количеством флагов?
Кому интересно сама программа с исходниками находится тут:
Hash Function Efficiency v0.1 pre-Alpha (May 11th, 2017)
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
11.05.2017, 17:33 12
Это просто какая-то вычурная запись цикла.
0
eXPonent
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
11.05.2017, 17:38  [ТС] 13
Цитата Сообщение от nmcf Посмотреть сообщение
Это просто какая-то вычурная запись цикла.
А как нужно? так:
C++
1
for(unsigned int b(0); b != UINT_MAX; ++b)
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
11.05.2017, 17:46 14
Да.
0
11.05.2017, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2017, 17:46

Ошибка переполнения буфера
При первом запуске програма работает, после второго появляеться ошибка...

Ошибка переполнения массива
Здравствуйте. Задача легкая,нужно создать массив из 1000000 элементов,и найти...

Как отловить переполнения?
Есть проект dll, в в нём экспортируемая функция, возвращающая BOOL, требуется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru