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

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

988
Неопределенные точки поведения и последовательности

Что такое «точки последовательности»? Какова связь между неопределенным поведением и точками последовательности? Я часто использую смешные и запутанные выражения, например a[++i] = i;, чтобы чувствовать себя лучше. Почему я должен прекратить использовать их? Если вы прочитали это, обязательно...

815
Почему эти конструкции используют неопределенное поведение до и после приращения?

#include <stdio.h> int main(void) { int i = 0; i = i++ + ++i; printf("%d\n", i); // 3 i = 1; i = (i++); printf("%d\n", i); // 2 Should be 1, no ? volatile int u = 0; u = u++ + ++u; printf("%d\n", u); // 1 u = 1; u = (u++); printf("%d\n", u); // 2 Should also be one, no ? register int v = 0; v...

500
Допускает ли стандарт C ++ неинициализированный bool для сбоя программы?

Я знаю, что «неопределенное поведение» в C ++ может позволить компилятору делать все, что он захочет. Однако у меня произошел сбой, который удивил меня, так как я предположил, что код достаточно безопасен. В этом случае настоящая проблема возникла только на конкретной платформе, использующей...

329
Является ли неинициализированная локальная переменная самым быстрым генератором случайных чисел?

Я знаю, что неинициализированная локальная переменная - это неопределенное поведение ( UB ), а также у значения могут быть представления ловушек, которые могут повлиять на дальнейшие операции, но иногда я хочу использовать случайное число только для визуального представления и больше не буду...

267
Почему f (i = -1, i = -1) неопределенное поведение?

Я читал о порядке нарушений оценки , и они приводят пример, который озадачивает меня. 1) Если побочный эффект на скалярный объект не секвенирован относительно другого побочного эффекта на тот же скалярный объект, поведение не определено. // snip f(i = -1, i = -1); // undefined behavior В этом...

240
Почему это делается для выхода из цикла на некоторых платформах, а не на других?

Я недавно начал изучать C, и я беру класс с C в качестве предмета. В настоящее время я играю с петлями и сталкиваюсь со странным поведением, которое не знаю, как объяснить. #include <stdio.h> int main() { int array[10],i; for (i = 0; i <=10 ; i++) { array[i]=0; /*code should never...

210
Почему целочисленное переполнение без знака определяется поведением, а переполнение со знаком - нет?

Целочисленное переполнение без знака хорошо определяется стандартами C и C ++. Например, стандарт C99 ( §6.2.5/9) гласит Вычисления с использованием беззнаковых операндов никогда не могут переполниться, потому что результат, который не может быть представлен результирующим целочисленным типом без...

201
Каковы все распространенные неопределенные поведения, о которых должен знать программист C ++? [закрыто]

Трудно сказать, что здесь спрашивают. Этот вопрос является двусмысленным, расплывчатым, неполным, чрезмерно широким или риторическим, и на него нельзя дать разумный ответ в его нынешней форме. Чтобы получить разъяснения по этому вопросу, чтобы его можно было снова открыть, посетите справочный...

162
Почему этот цикл выдает «предупреждение: итерация 3u вызывает неопределенное поведение» и выводит более 4 строк?

Компилируя это: #include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i*1000000000 << std::endl; } и gccвыдает следующее предупреждение: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i*1000000000...

153
Оптимизация «время (1);» в C ++ 0x

Обновлено, смотрите ниже! Я слышал и читал, что C ++ 0x позволяет компилятору напечатать «Hello» для следующего фрагмента #include <iostream> int main() { while(1) ; std::cout << "Hello" << std::endl; } По-видимому, это как-то связано с потоками и возможностями оптимизации. Мне...

148
Почему улучшенный оптимизатор GCC 6 нарушает практический код C ++?

В GCC 6 появилась новая функция оптимизатора : она предполагает, что thisона всегда не равна нулю, и оптимизирует на основе этого. Распространение диапазона значений теперь предполагает, что указатель this функций-членов C ++ не равен NULL. Это исключает обычные проверки нулевого указателя, но...

129
Доступ к неактивному члену союза и неопределенному поведению?

У меня создалось впечатление, что доступ к unionчлену, отличному от последнего набора, - это UB, но я не могу найти надежную ссылку (кроме ответов, в которых утверждается, что это UB, но без какой-либо поддержки со стороны стандарта). Итак, это неопределенное...

129
Почему целочисленное переполнение на x86 с GCC вызывает бесконечный цикл?

Следующий код переходит в бесконечный цикл GCC: #include <iostream> using namespace std; int main(){ int i = 0x10000000; int c = 0; do{ c++; i += i; cout << i << endl; }while (i > 0); cout << c << endl; return 0; } Итак, дело в следующем: подписанное целочисленное...

120
Когда вызов функции-члена в экземпляре NULL приводит к неопределенному поведению?

Рассмотрим следующий код: #include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): void baz() { x = 5; } int x; }; int main() { foo* f = 0; f->bar(); // (a) f->baz(); // (b) } Мы ожидаем (b)сбоя, потому что xдля нулевого...

118
Как я получил значение размером больше 8 бит из 8-битного целого числа?

Я обнаружил чрезвычайно неприятную ошибку, скрывающуюся за этой маленькой жемчужиной. Я знаю, что согласно спецификации C ++ подписанные переполнения являются неопределенным поведением, но только когда переполнение происходит, когда значение расширяется до разрядности sizeof(int). Насколько я...

111
Является ли «взлом структуры» технически неопределенным поведением?

Я спрашиваю о хорошо известном трюке «последний член структуры имеет переменную длину». Это выглядит примерно так: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; strcpy(p->s, "hello world"); Благодаря тому, как структура размещается в памяти, мы...

96
Использует malloc для поведения int undefined до C ++ 20

Мне сказали, что следующий код имеет неопределенное поведение до C ++ 20: int *p = (int*)malloc(sizeof(int)); *p = 10; Это правда? Аргументом было то, что время жизни intобъекта не начинается до присвоения ему значения ( P0593R6 ). Для устранения проблемы newследует использовать размещение: int *p...

93
Печать нулевых указателей с% p является неопределенным поведением?

Является ли неопределенное поведение печатью нулевых указателей с помощью %pспецификатора преобразования? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } Вопрос относится к стандарту C, а не к реализациям C....