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

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

2
Когда вызов функции-члена в экземпляре 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)сбоя, …

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.