Вопросы по теме '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 просмотров
schedule
06.07.2022
Является ли (--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 просмотров
schedule
25.08.2022
Назначение ссылки путем разыменования нулевого указателя
int& fun()
{
int * temp = NULL;
return *temp;
}
В приведенном выше методе я пытаюсь выполнить разыменование указателя NULL. Когда я вызываю эту функцию, она не дает исключения. Я обнаружил, что когда возвращаемый тип находится по...
5865 просмотров
schedule
10.08.2022
Макросы и постинкремент
Вот еще немного странного поведения макросов, на которое я надеялся, кто-нибудь сможет пролить свет:
#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 просмотров
schedule
05.02.2023
Возврат адреса поведения локальной переменной
Возможный дубликат: Можно ли получить доступ к памяти локальной переменной за пределами ее области?
вход:
#include <stdlib.h>
#include <stdio.h>
int func2(void);
int* func1(void);
int func2(void)
{
int* b;
b =...
1090 просмотров
schedule
05.07.2023
C++ Какое самое раннее неопределенное поведение может проявиться?
Я знаю, что неопределенное поведение потенциально может вызвать что угодно, что делает любую программу, содержащую UB, потенциально бессмысленной. Мне было интересно, есть ли способ определить самую раннюю точку в программе, в которой неопределенное...
333 просмотров
schedule
09.04.2023
Правильный способ сериализации двоичных данных в C++
Прочитав следующее 1 и 2 Q/As и имеющие использовал метод, обсуждаемый ниже, в течение многих лет на архитектурах x86 с GCC и MSVC и не видел проблем, теперь я очень запутался в том, что должно быть правильным, но также важным «наиболее...
7179 просмотров
schedule
12.02.2023
Базовое представление C/C++ для char, unsigned char и signed char
Буду ли я прав, если скажу, что базовое представление объекта (битовый шаблон) в каждом из следующих определений одинаково?
char c = 240;
unsigned char c = 240;
signed char c = 240;
Итак, signed -ness имеет значение только тогда, когда c...
965 просмотров
schedule
25.04.2023
Почему 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