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

Выбрасывание неконстантных временных файлов по ссылке
Есть ли проблема с выбросом объекта, созданного в стеке в блоке try, по неконстантной ссылке, его перехватом и изменением, а затем выбросом по ссылке на другой блок catch? Ниже приводится краткий пример того, о чем я говорю. struct EC {...
3332 просмотров
schedule 14.04.2023

Беззнаковый символ a [4] [5]; а [1] [7]; неопределенное поведение?
Один из примеров неопределенного поведения из стандарта C гласит (J.2): - Индекс массива выходит за пределы допустимого диапазона, даже если объект явно доступен с заданным индексом (как в выражении lvalue a [1] [7] при объявлении int a [4]...
708 просмотров

Является ли (--i == i++) неопределенным поведением?
этот вопрос связан с моей предыдущей проблемой . Я получил следующий ответ: "Это неопределенное поведение". Пожалуйста, кто-нибудь объясните: Что такое неопределенное поведение? как я могу узнать, что мой код имеет неопределенное...
1249 просмотров
schedule 14.07.2023

О неопределенном поведении
Как правило, UB считается чем-то, чего следует избегать, и сам текущий стандарт C содержит довольно много примеров в приложении J. Однако бывают случаи, когда я не вижу никакого вреда в использовании UB, кроме потери переносимости. Рассмотрим...
1034 просмотров
schedule 30.01.2023

Зависимости в списках инициализации
Является ли это поведение четко определенным? class Foo { int A, B; public: Foo(int Bar): B(Bar), A(B + 123) { } }; int main() { Foo MyFoo(0); return 0; }
2205 просмотров

Назначение ссылки путем разыменования нулевого указателя
int& fun() { int * temp = NULL; return *temp; } В приведенном выше методе я пытаюсь выполнить разыменование указателя NULL. Когда я вызываю эту функцию, она не дает исключения. Я обнаружил, что когда возвращаемый тип находится по...
5865 просмотров

Макросы и постинкремент
Вот еще немного странного поведения макросов, на которое я надеялся, кто-нибудь сможет пролить свет: #define MAX(a,b) (a>b?a:b) void main(void) { int a = 3, b=4; printf("%d %d %d\n",a,b,MAX(a++,b++)); } Результатом является 4 6 5....
5249 просмотров
schedule 24.04.2023

Передача `this` до завершения базовых конструкторов: UB или просто опасно?
Рассмотрим этот самый маленький пример (я мог придумать): struct Bar; struct Foo { Bar* const b; Foo(Bar* b) : b(b) {} }; struct Bar { Foo* const f; Bar(Foo* f) : f(f) {} }; struct Baz : Bar { Baz() : Bar(new Foo(this)) {} }; При...
299 просмотров
schedule 31.05.2022

Мой код может дать сбой, потому что «класс» не совместим с C?
-edit- Я сузил его. Воспроизводимый: почему передача этого объекта в C прерывается мой код? Мое приложение не работает должным образом после того, как я внес изменения. Я получил предупреждение в msvc, но не в gcc. Вот репо предупреждения....
502 просмотров
schedule 30.03.2024

Ошибка неполного типа в BGL при использовании связанных свойств
У меня этот код правильно компилировался в какой-то версии g++ 4.x, теперь версия 4.6 завершает компиляцию с ошибкой: /usr/include/boost/pending/property.hpp:35:7: error: ‘boost::property<Tag, T, Base>::m_value’ has incomplete type...
382 просмотров
schedule 29.11.2022

Точки последовательности при вызове функций в C и неопределенном/неуказанном поведении
Я пытаюсь определить свое понимание точек следования в C - просто хотел кое-что проверить. В настоящее время я считаю, что (1) не определено, тогда как (2) просто не определено, на основании того, что в (2) есть точки последовательности после оценки...
552 просмотров

Возврат адреса поведения локальной переменной
Возможный дубликат: Можно ли получить доступ к памяти локальной переменной за пределами ее области? вход: #include <stdlib.h> #include <stdio.h> int func2(void); int* func1(void); int func2(void) { int* b; b =...
1090 просмотров

C++ Какое самое раннее неопределенное поведение может проявиться?
Я знаю, что неопределенное поведение потенциально может вызвать что угодно, что делает любую программу, содержащую UB, потенциально бессмысленной. Мне было интересно, есть ли способ определить самую раннюю точку в программе, в которой неопределенное...
333 просмотров
schedule 09.04.2023

Правильный способ сериализации двоичных данных в C++
Прочитав следующее 1 и 2 Q/As и имеющие использовал метод, обсуждаемый ниже, в течение многих лет на архитектурах x86 с GCC и MSVC и не видел проблем, теперь я очень запутался в том, что должно быть правильным, но также важным «наиболее...
7179 просмотров

Базовое представление C/C++ для char, unsigned char и signed char
Буду ли я прав, если скажу, что базовое представление объекта (битовый шаблон) в каждом из следующих определений одинаково? char c = 240; unsigned char c = 240; signed char c = 240; Итак, signed -ness имеет значение только тогда, когда c...
965 просмотров

Почему C не определяет минимальный размер массива?
Стандарт C определяет множество нижних/верхних ограничений ( ограничения перевода ) и накладывает реализацию, которая должна удовлетворять каждому переводу. Почему нет такого минимального предела, определенного для размера массива? Следующая...
1159 просмотров
schedule 31.07.2022

Есть ли у JavaScript неопределенное поведение?
Есть ли у JavaScript неопределенное поведение (похожее на C) или оно полностью определено спецификацией и детерминировано? Обратите внимание, что я отбрасываю ошибки реализации и расхождения в спецификациях. Я также отбрасываю такие вещи, как...
2612 просмотров
schedule 27.04.2023

Вызывает ли доступ к сегменту .text через внешние переменные поведение undefined?
Это файл "1.c" #include <stdio.h> char foo; int bar(){ } int main(){ printf("%d",foo); return 0; } //-------------------------- Это файл '2.c' void foo(){ } Компилятор...
69 просмотров
schedule 06.07.2022

Странное поведение нулевого указателя
Я создал указатель NULL класса App , но каким-то образом метод объекта NULL (приложения) работает. Вот мой код: #include "App.h" #include <iostream> using namespace std; int main() { App* pointer = NULL; pointer->print();...
124 просмотров
schedule 13.04.2022

Безопасно ли вызывать std::map::erase с помощью std::map::begin?
Мы (все) знаем, что стирание элемента, указателя с помощью итератора делает итератор недействительным, например: std::map< .. > map_; std::map< .. >::iterator iter; // .. map_.erase( iter ); // this will invalidate `iter`. Но...
623 просмотров
schedule 07.10.2022