Вопросы с тегом «undefined-behavior»

88
Можно ли считать ветки с неопределенным поведением недоступными и оптимизировать их как мертвый код?

Рассмотрим следующее утверждение: *((char*)NULL) = 0; //undefined behavior Он явно вызывает неопределенное поведение. Означает ли существование такого оператора в данной программе, что вся программа не определена или что поведение становится неопределенным только после того, как поток управления...

87
Почему printf («% f», 0); дать неопределенное поведение?

Заявление printf("%f\n",0.0f); печатает 0. Однако заявление printf("%f\n",0); печатает случайные значения. Я понимаю, что проявляю какое-то неопределенное поведение, но не могу понять почему. Значение с плавающей запятой, в котором все биты равны 0, по-прежнему допустимо floatсо значением 0....

86
В какой момент цикла целочисленное переполнение становится неопределенным?

Это пример для иллюстрации моего вопроса, который включает в себя гораздо более сложный код, который я не могу здесь опубликовать. #include <stdio.h> int main() { int a = 0; for (int i = 0; i < 3; i++) { printf("Hello\n"); a = a + 1000000000; } } Эта программа содержит неопределенное...

85
Законно ли исходный код, содержащий неопределенное поведение, вызывать сбой компилятора?

Скажем, я собираюсь скомпилировать какой-то плохо написанный исходный код C ++, который вызывает неопределенное поведение, и поэтому (как говорится) «все может случиться». С точки зрения того, что спецификация языка C ++ считает приемлемым для "совместимого" компилятора, "что-нибудь" в этом...

84
Неопределенное поведение и точки последовательности перезагружены

Считайте эту тему продолжением следующей темы: Предыдущая партия Неопределенное поведение и точки последовательности Давайте еще раз вернемся к этому забавному и запутанному выражению (выделенные курсивом фразы взяты из темы выше * улыбка *): i += ++i; Мы говорим, что это вызывает неопределенное...

84
Является ли подписанное целочисленное переполнение неопределенным поведением в C ++?

Как известно, целочисленное переполнение со знаком - это неопределенное поведение . Но в cstdintдокументации по C ++ 11 есть кое-что интересное : целочисленный тип со знаком шириной ровно 8, 16, 32 и 64 бита соответственно без битов заполнения и с использованием дополнения до 2 для отрицательных...

82
(Почему) использует неопределенное поведение неинициализированной переменной?

Если у меня есть: unsigned int x; x -= x; ясно, что после этого выражения x должно быть ноль, но куда бы я ни посмотрел, они говорят, что поведение этого кода не определено, а не просто значение x(до вычитания). Два вопроса: Действительно ли поведение этого кода не определено? (Например, может...

82
Программа странно ведет себя в онлайн-среде IDE

Я наткнулся на следующую программу на C ++ ( источник ): #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i * 12345678 << std::endl; } Это выглядит как простая программа и дает правильный вывод на моем локальном компьютере, то...

81
Почему 'd / = d' не генерирует исключение деления на ноль, когда d == 0?

Я не совсем понимаю, почему я не получаю исключение деления на ноль: int d = 0; d /= d; Я ожидал получить деление на нулевое исключение, но вместо этого d == 1. Почему не d /= dгенерирует исключение деления на ноль, когда d == 0?...

56
Переполнение со знаком в C ++ и неопределенное поведение (UB)

Мне интересно об использовании кода, как следующий int result = 0; int factor = 1; for (...) { result = ... factor *= 10; } return result; Если цикл повторяется с течением nвремени, то factorон умножается на 10точное nвремя. Тем не менее, factorиспользуется только после умножения на 10общее...

34
Инкремент указателя на динамический массив размером 0 не определен?

AFAIK, хотя мы не можем создать массив статической памяти размером 0, но мы можем сделать это с динамическими: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined Как я читал, pдействует как элемент «один конец». Я могу напечатать адрес, на который pуказывает. if(p) cout...

33
Как работает сравнение указателей в C? Можно ли сравнивать указатели, которые не указывают на один и тот же массив?

В главе 5 K & R (язык программирования C, 2-е издание) я прочитал следующее: Во-первых, указатели могут сравниваться при определенных обстоятельствах. Если pи qуказывают на элементы одного и того же массива, то соотношения нравится ==, !=, <, >=и т.д. работать должным образом. Кажется,...

31
Странное поведение с полями классов при добавлении в std :: vector

Я обнаружил очень странное поведение (на Clang и GCC) в следующей ситуации. У меня есть вектор, nodesс одним элементом, экземпляр класса Node. Затем я вызываю функцию, nodes[0]которая добавляет новый Nodeвектор. При добавлении нового узла поля вызывающего объекта сбрасываются! Однако они, похоже,...

29
Копирование структур с неинициализированными членами

Допустимо ли копировать структуру, некоторые члены которой не инициализированы? Я подозреваю, что это неопределенное поведение, но если это так, то оставлять неинициализированные члены в структуре (даже если эти члены никогда не используются напрямую) довольно опасно. Поэтому мне интересно, есть ли...

26
Есть ли в C эквивалент std :: less из C ++?

Недавно я отвечал на вопрос о неопределенном поведении p < qв C, когда pи qесть указатели на разные объекты / массивы. Это заставило меня задуматься: <в этом случае C ++ имеет такое же (неопределенное) поведение , но также предлагает стандартный шаблон библиотеки, std::lessкоторый...

16
Почему функция conteval допускает неопределенное поведение?

В C ++ есть очень удобное свойство константных выражений: их оценка не может иметь неопределенного поведения ( 7.7.4.7 ): Выражение e является основным константным выражением, если при вычислении e, следуя правилам абстрактной машины ([intro.execution]), не будет выполнено одно из следующих...

15
Является ли программа, которая никогда не завершает действительную программу C ++?

Требуется ли прекращение работы программы? Другими словами, это программа, которая всегда работает технически с неопределенным поведением? Обратите внимание, что это не о пустых циклах. Разговор о программах, которые делают "вещи" (то есть наблюдаемое поведение) навсегда. Например, что-то вроде...

14
Вызов функции с указателем на неконстантный и указатель на константные аргументы с тем же адресом

Я хочу написать функцию, которая вводит массив данных и выводит другой массив данных, используя указатели. Мне интересно, каков результат, если оба srcи dstуказали на один и тот же адрес, потому что я знаю, что компилятор может оптимизировать для const. Это неопределенное поведение? (Я отметил теги...

12
Возможное неопределенное поведение в примитивной реализации static_vector

tl; dr: я думаю, что мой static_vector имеет неопределенное поведение, но я не могу его найти. Эта проблема на Microsoft Visual C ++ 17. У меня есть эта простая и незавершенная реализация static_vector, то есть вектор с фиксированной емкостью, который может быть выделен в стеке. Это программа C ++...

11
Является ли `string.assign (string.data (), 5)` хорошо определенным или UB?

Коллега хотел написать это: std::string_view strip_whitespace(std::string_view sv); std::string line = "hello "; line = strip_whitespace(line); Я сказал, что возвращение string_viewсделало меня априори непростым , и, кроме того, псевдоним здесь выглядел как UB для меня. Я могу с уверенностью...