Вопросы по теме 'undefined-behavior'

Что такое строгое правило псевдонима?
На вопрос о общем неопределенном поведении в C люди иногда ссылаются на строгое правило псевдонима. О чем они говорят?
232458 просмотров

Каковы все общие неопределенные поведения, о которых должен знать программист на C ++?
Каковы все общие неопределенные поведения, о которых должен знать программист на C ++? Скажите, например: a[i] = i++;
71964 просмотров
schedule 20.05.2022

Как объяснить результат выражения (++ x) + (++ x) + (++ x)?
x = 1; std::cout << ((++x)+(++x)+(++x)); Я ожидаю, что результат будет 11 , но на самом деле это 12 . Почему?
2514 просмотров

Почему бы мне не попробовать использовать это значение после удаления?
В этом параграфе C ++ FAQ обсуждается использование конструкции delete this . Перечислены 4 ограничения. Ограничения с 1 по 3 выглядят вполне разумными. Но почему там ограничение 4, что я «не должен его проверять, сравнивать с другим...
2045 просмотров
schedule 01.03.2022

С++ удалить. Он удаляет мои объекты, но я все еще могу получить доступ к данным?
Я написал простую работающую игру тетрис, в которой каждый блок является экземпляром класса singleblock. class SingleBlock { public: SingleBlock(int, int); ~SingleBlock(); int x; int y; SingleBlock *next; }; class...
15644 просмотров

Когда вызов функции-члена для нулевого экземпляра приводит к неопределенному поведению?
Рассмотрим следующий код: #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;...
15541 просмотров

Деление на ноль: неопределенное поведение или реализация, определенная в C и/или C++?
Относительно деления на ноль в стандартах сказано: C99 6.5.5p5 - Результатом оператора / является частное от деления первого операнда на второй; результатом оператора % является остаток. В обеих операциях, если значение второго операнда равно...
24563 просмотров
schedule 08.07.2023

Что такое неопределенное поведение?
Что это за неопределенное поведение , о котором я все время читаю? Почему демоны вылетают из моего носа?
1218 просмотров
schedule 11.07.2022

Почему другое поведение для указателей TYPE* ​​const?
Ниже код имеет дело с указателем TYPE* const . struct D { void Check () { D* const p = new D; // 2nd test is "p = 0;" cout<<"p = "<<p<<endl; (D*&)p = new D; cout<<"p = "<<p<<endl; //...
137 просмотров

Консультации по решению UD в низкоуровневых функциях управления
Я новичок в C и начал писать небольшую библиотеку с функциями для получения длины строк, обращения строк, преобразования двоичных данных в буферах символов в целые числа и шорты. Просто ради образования и лучшего понимания низкоуровневых функций,...
62 просмотров

Стандартная ссылка для int foo = foo
int foo = foo; компилируется. Какая часть стандарта С++ разрешает это?
551 просмотров
schedule 24.08.2022

Вызывает ли макрос offsetof из ‹stddef.h› неопределенное поведение?
Пример из реализации MSVC: #define offsetof(s,m) \ (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m)) // ^^^^^^^^^^^ Как видно, он разыменовывает нулевой...
2715 просмотров
schedule 22.04.2022

Имя типа = имя; когда-либо был полезен в C++?
В C++ разрешен следующий код: int a = a; or Type name = name; Оба приводят к тому, что неинициализированный объект инициализируется сам по себе, что часто приводит к неопределенному поведению. Нужен ли такой код или разумен ли он?...
595 просмотров

Может ли Valgrind уловить все виды неопределенного поведения?
Другими словами, могу ли я быть уверен, что моя программа не имеет неопределенного поведения, если она работает без каких-либо сообщений об ошибках Valgrind?
1255 просмотров
schedule 28.11.2022

Почему это нарушение прав доступа может происходить с флагами /Og и /GL при передаче по ссылке?
Когда (и только когда) я компилирую свою программу с флагами /Og и /GL , используя компилятор Windows Server 2003 DDK C++ (это хорошо на WDK 7.1, а также Visual Studio 2010!), я получаю нарушение прав доступа, когда запускаю это: #include...
376 просмотров

Почему char* вызывает неопределенное поведение, а char[] — нет?
Попытка изменить строковый литерал приводит к неопределенному поведению: char * p = "wikipedia"; p[0] = 'W'; // undefined behaviour Один из способов предотвратить это — определить его как массив вместо указателя: char p[] = "wikipedia";...
1326 просмотров
schedule 03.10.2022

Почему этот вызов Objective C зависает?
Мой друг обнаружил какое-то странное поведение с NSDictionary, и мне любопытно, почему это происходит. Рассмотрим следующий код: NSDictionary *dict = [[NSDictionary alloc] init]; // Oops, we can't mutate an NSDictionary [dict setObject:[[NSNull...
292 просмотров
schedule 13.10.2022

Разница между стеком и кучей
Скажите, пожалуйста, в чем разница между стеком и кучей в отношении приведенного ниже кода. int main() { int arr[3]; int *a; arr [5] = 6; // out of bound but it will not give error. arr [3000] = 8 ; //SIGSEGV a = malloc...
1107 просмотров
schedule 22.09.2022

Точки последовательности и порядок оценки
Я читал K&R и наткнулся на этот пример о неопределенности в поведении при оценке выражения вроде a[i]=i++ ; Спецификация C99 в $ 6.5.2 говорит, что Между предыдущей и следующей точкой последовательности сохраненное значение объекта должно...
442 просмотров
schedule 27.07.2023

Является ли неопределенным поведением формирование диапазона указателей из адреса стека?
Некоторые программисты на C или C++ с удивлением обнаруживают, что даже сохранение недопустимого указателя это неопределенное поведение . Однако для массивов кучи или стека можно хранить адрес единицы после конца массива, что позволяет сохранять...
793 просмотров