Описание тега undefined-behavior

Непредсказуемый результат компиляции или выполнения программы, которая нарушает правила языка, которые не должны обеспечивать ни компилятор, ни интерпретатор, ни исполняющая система. НЕ ИСПОЛЬЗУЙТЕ этот тег для вопросов, касающихся типа данных или возвращаемого значения "undefined". В таких случаях следует использовать тег [undefined].
2 ответа

Что может вызвать "неопределенное поведение" в этом параллельном коде графического процессора?

Предположим, что core1 и core2 пытаются записать свои переменные a и b в одну и ту же область памяти. Как можно объяснить UB здесь? Мы не знаем, записаны ли a или b в эту ячейку памяти (как последнее действие). Мы даже не знаем, что там написано (фи…
11 фев '14 в 15:21
2 ответа

c - Почему я = ++ я вызываю неопределенное поведение?

Я понимаю, что C использует понятие точек последовательности для определения неоднозначных вычислений, и что = Оператор не является точкой последовательности. Однако я не вижу никакой двусмысленности в выполнении заявления i = ++i Насколько я понима…
1 ответ

Почему удаление void* является UB, а не ошибкой компиляции?

Зачем удалять объект через void* быть неопределенным поведением, а не ошибкой компиляции? void foo(void* p) { delete p; } Этот код компилирует и производит код, хотя и с предупреждением о gcc и clang (удивительно, что ICC не выдает предупреждение): …
0 ответов

QQmlListProperty ошибочные сбои с передачей прав собственности на JavaScript

Я испытываю некоторые серьезные носовые демоны с Qt5 (5.8, Arch Linux) и QML. По сути, код предоставляет QQmlListProperty с его членами, созданными на лету, и передающими свои права на JavaScript. Когда сигнал itemChanged() испускается тысячи раз (в…
02 апр '17 в 19:53
1 ответ

Если char - один байт, как это не неопределенное поведение?

Таким образом, int составляет четыре байта, я просто не понимаю, как C знает, как сделать это в этом случае здесь Случайная функция, чтобы показать, что я имею в виду char strl[20]; int c, i=0; puts("Enter a string up to 19 characters"); while((i&lt…
10 окт '15 в 00:44
5 ответов

Странное поведение scanf для краткого int

Код выглядит следующим образом: #include <stdio.h> main() { int m=123; int n = 1234; short int a; a=~0; if((a>>5)!=a){ printf("Logical Shift\n"); m=0; } else{ printf("Arithmetic Shift\n"); m=1; } scanf("%d",&a); printf("%d\n", m); } …
19 дек '11 в 03:29
1 ответ

Ожидается ли, что слишком большое битовое смещение - неопределенное поведение в Rust?

Когда вы запускаете этот код: #![allow(exceeding_bitshifts)] fn main() { const NUMBER: u64 = 0b_10101010; fn print_shift(i: u32) { println!("{:b}", NUMBER >> i); } print_shift(65); println!("{:b}", NUMBER >> 65); } Вы видите, что смещени…
12 окт '17 в 16:09
3 ответа

Странные результаты для условного оператора с указателями GCC и bool

В следующем коде я memset() stdbool.h bool переменная к значению 123, (Возможно, это неопределенное поведение?) Затем я передаю указатель на эту переменную функции-жертве, которая пытается защитить себя от неожиданных значений с помощью условной опе…
26 дек '14 в 20:42
2 ответа

Является ли `C == C++` неопределенным поведением?

Друг говорит мне, что после: int C = anything; C == C++ будет иметь значение true, Это задумано как шутка, своего рода опровержение часто заявляемого "C не то же самое, что C++". Тем не менее, так как == это не точка последовательности, я утверждаю,…
22 сен '14 в 00:54
2 ответа

Значение элемента массива вне границ - должно ли оно меняться при каждом выполнении или оставаться неизменным?

Для фактического вопроса перейдите к части вопроса . Для интересного реального примера неопределенного поведения продолжайте читать:) Было это перечисление: struct EnumStruct { enum Enum { val0 = 0, val1, val2, val3, val4 }; }; и в некоторой функции…
0 ответов

Сохранение значения указателя на специализированную функцию шаблона

Я хотел бы использовать некоторое сопоставимое представление типа, которое не является прямым, как std::is_same<> и не использует RTTI. __PRETTY_FUNCTION__ макрос дает одинаковую строку для 2 разных классов с одинаковыми именами, определенными в раз…
2 ответа

Почему библиотека коллекций Java говорит, что методы "могут генерировать" исключения вместо "будут выбрасывать"?

В [java.util.Collections][1] в Java SE 6 написано: "Деструктивные" алгоритмы, содержащиеся в этом классе, то есть алгоритмы, которые модифицируют коллекцию, в которой они работают, определены как UnsupportedOperationException если коллекция не подде…
1 ответ

Ошибка сегмента / неопределенное поведение в функции сравнения std::map

Это сбило меня с толку сегодня. У меня проблемы с пониманием того, почему код ниже seg дает сбой при последней вставке в test_map. Используя emplace(), insert() работают как положено, но использование оператора [] завершается неудачно. Я прочитал со…
2 ответа

Является ли временный объект изначально постоянным?

Это код UB? struct A { void nonconst() {} }; const A&amp; a = A{}; const_cast&lt;A&amp;&gt;(a).nonconst(); Другими словами, является (временным) объектом изначально const? Я просмотрел стандарт, но не могу найти ответ, поэтому буду признателен за ци…
2 ответа

Безопасно ли следующее?

Рассмотрим этот код: struct A {}; struct B { B(A* a) : a(a) {} private: A* a; }; struct base { base(B b) : b(b) {} protected: A a; private: B b; }; struct derived : public base { derived() : base(B(&amp;a)) // &lt;-- IS THIS OK? {} }; Здесь базовому…
31 дек '11 в 06:32
0 ответов

Неопределенное поведение и "точки последовательности" в C++17

На этот вопрос мы очень хорошо ответили. Какие новые возможности в C++17? Но я думаю, что эта конкретная тема может быть освещена специально, поскольку она сложна и такие вопросы (о i = i++;) все еще спрашивают каждый день (хотя это не рекомендуется…
10 янв '18 в 14:51
2 ответа

Очки последовательности и порядок оценки

Я читал K&R; и наткнулся на этот пример о неопределенности в поведении, оценивая выражение как a[i]=i++; Спецификация C99 в $6.5.2 говорит, что Между предыдущей и следующей точкой последовательности объект должен иметь свое сохраненное значение, изм…
30 янв '12 в 07:42
2 ответа

Лямбда захватывает эту и длительную функцию

У меня есть функция, которая требует много времени для запуска, но, к счастью, она работает асинхронно. Я хочу взять результат этого вызова функции и установить его в частную переменную экземпляра класса. Кажется легким: // Exists in some other libr…
3 ответа

Неопределенное поведение: при попытке получить доступ к результату вызова функции

Следующий компилирует и печатает "строку" в качестве вывода. #include &lt;stdio.h&gt; struct S { int x; char c[7]; }; struct S bar() { struct S s = {42, "string"}; return s; } int main() { printf("%s", bar().c); } По-видимому, это вызывает неопредел…
07 дек '12 в 01:36
4 ответа

NaN обрабатывается по-разному в разных версиях g++

Рассмотрим следующую программу, которая явно глючит: #include &lt;cstdio&gt; double test(int n) { if (n % 2 == 0) return 0.0; // warning: control reaches end of non-void function } int main() { printf("%.9lf\n", test(0)); printf("%.9lf\n", test(1));…
06 июл '11 в 12:08