Запитання з тегом «undefined-behavior»

Непередбачуваний результат компіляції або виконання програми, що порушує правила мови, ні компілятор, ні інтерпретатор, ні система виконання не повинні застосовувати. НЕ ВИКОРИСТОВУЙТЕ цей тег для запитань щодо типу даних або значення повернення "undefined". У цих випадках замість цього слід використовувати тег [undefined].

5
Доступ до неактивного члена профспілки та невизначена поведінка?
У мене склалося враження, що доступ до іншого unionчлена, окрім останнього набору, є UB, але я не можу знайти чітку довідку (крім відповідей, що стверджують, що це UB, але без підтримки стандарту). Отже, чи не визначена поведінка?

2
Коли виклик функції-члена на нульовому екземплярі призводить до невизначеної поведінки?
Розглянемо наступний код: #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). Як я розумію, збільшення природи charніколи не повинно бути визначеним поведінкою sizeof(char) < …

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 до C ++ 20
Мені сказали, що наступний код має невизначену поведінку до С ++ 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; } Питання стосується стандарту С, а не реалізації С.

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 ++, який викликає невизначену поведінку, і тому (як вони кажуть) "все може статися". З точки зору того, що специфікація мови С ++ вважає прийнятною для компілятора "конформний", чи включає "що-небудь" у цьому сценарії збої компілятора (або викрадення моїх паролів, або …

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

3
Чи є переповнене цілочисельним переповненням все ще невизначеною поведінкою в C ++?
Як ми знаємо, переповнення цілим числом із підписом є невизначеною поведінкою . Але в документації C ++ 11 є щось цікаве cstdint: підписаний цілочисельний тип із шириною рівно 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(до моменту віднімання). Два питання: Чи дійсно поведінка цього коду невизначена? (Наприклад, може збій коду [чи …

12
Виявлення переписаного переповнення в C / C ++
На перший погляд, це питання може здатися дублікатом Як виявити переповнення цілих чисел? , проте насправді це суттєво відрізняється. Я виявив, що виявлення переповнення цілого числа без підпису є досить тривіальним, виявляючи підписане переповнення в C / C ++ насправді складніше, ніж думає більшість людей. Найбільш очевидним, але наївним способом …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.