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

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

3
Инкремент указателя на динамический массив размером 0 не определен?
AFAIK, хотя мы не можем создать массив статической памяти размером 0, но мы можем сделать это с динамическими: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined Как я читал, pдействует как элемент «один конец». Я могу напечатать адрес, на который pуказывает. if(p) cout << p …

7
Как работает сравнение указателей в C? Можно ли сравнивать указатели, которые не указывают на один и тот же массив?
В главе 5 K & R (язык программирования C, 2-е издание) я прочитал следующее: Во-первых, указатели могут сравниваться при определенных обстоятельствах. Если pи qуказывают на элементы одного и того же массива, то соотношения нравится ==, !=, <, >=и т.д. работать должным образом. Кажется, это означает, что сравнивать можно только указатели, …

2
Странное поведение с полями классов при добавлении в std :: vector
Я обнаружил очень странное поведение (на Clang и GCC) в следующей ситуации. У меня есть вектор, nodesс одним элементом, экземпляр класса Node. Затем я вызываю функцию, nodes[0]которая добавляет новый Nodeвектор. При добавлении нового узла поля вызывающего объекта сбрасываются! Однако они, похоже, снова возвращаются в нормальное состояние после завершения функции. Я …

4
Копирование структур с неинициализированными членами
Допустимо ли копировать структуру, некоторые члены которой не инициализированы? Я подозреваю, что это неопределенное поведение, но если это так, то оставлять неинициализированные члены в структуре (даже если эти члены никогда не используются напрямую) довольно опасно. Поэтому мне интересно, есть ли что-то в стандарте, что позволяет это. Например, это действительно? struct …

3
Есть ли в C эквивалент std :: less из C ++?
Недавно я отвечал на вопрос о неопределенном поведении p < qв C, когда pи qесть указатели на разные объекты / массивы. Это заставило меня задуматься: <в этом случае C ++ имеет такое же (неопределенное) поведение , но также предлагает стандартный шаблон библиотеки, std::lessкоторый гарантированно возвращает то же самое, что и …

1
Почему функция conteval допускает неопределенное поведение?
В C ++ есть очень удобное свойство константных выражений: их оценка не может иметь неопределенного поведения ( 7.7.4.7 ): Выражение e является основным константным выражением, если при вычислении e, следуя правилам абстрактной машины ([intro.execution]), не будет выполнено одно из следующих действий: ... операция, которая будет иметь неопределенное поведение, как указано …

2
Является ли программа, которая никогда не завершает действительную программу C ++?
Требуется ли прекращение работы программы? Другими словами, это программа, которая всегда работает технически с неопределенным поведением? Обратите внимание, что это не о пустых циклах. Разговор о программах, которые делают "вещи" (то есть наблюдаемое поведение) навсегда. Например, что-то вроде этого: int main() { while (true) { try { get_input(); // calls …

3
Вызов функции с указателем на неконстантный и указатель на константные аргументы с тем же адресом
Я хочу написать функцию, которая вводит массив данных и выводит другой массив данных, используя указатели. Мне интересно, каков результат, если оба srcи dstуказали на один и тот же адрес, потому что я знаю, что компилятор может оптимизировать для const. Это неопределенное поведение? (Я отметил теги C и C ++, потому …

1
Возможное неопределенное поведение в примитивной реализации static_vector
tl; dr: я думаю, что мой static_vector имеет неопределенное поведение, но я не могу его найти. Эта проблема на Microsoft Visual C ++ 17. У меня есть эта простая и незавершенная реализация static_vector, то есть вектор с фиксированной емкостью, который может быть выделен в стеке. Это программа C ++ 17, …

1
Является ли `string.assign (string.data (), 5)` хорошо определенным или UB?
Коллега хотел написать это: std::string_view strip_whitespace(std::string_view sv); std::string line = "hello "; line = strip_whitespace(line); Я сказал, что возвращение string_viewсделало меня априори непростым , и, кроме того, псевдоним здесь выглядел как UB для меня. Я могу с уверенностью сказать, что line = strip_whitespace(line)в этом случае эквивалентно line = std::string_view(line.data(), 5). …


2
Что происходит, если неопределенное поведение C ++ соответствует определенному поведению C?
У меня есть *.cppфайл, который я компилирую с C ++ (не компилятор C). Содержащая функция опирается на приведение (см. Последнюю строку), которое, кажется, определено в C (пожалуйста, исправьте, если я ошибаюсь!), Но не в C ++ для этого специального типа. [...] C++ code [...] struct sockaddr_in sa = {0}; int …

1
GCC не может сообщить о неправильно сформированном лямбда-вызове constexpr
Ниже приведены два тестовых примера для неопределенного поведения, выраженного как IIFE (немедленное название лямбда-экспрессии): constexpr auto test3 = []{ int* p{}; { int x{}; p = &x; } return *p; // Undefined Behaviour }(); // IIFE constexpr auto test4 = []{ int x = std::numeric_limits<int>::min(); int y = -x; // …

1
«Недопустимая инструкция по аппаратному обеспечению» из очень простого кода
Разрабатывая сомнительную претензию , я написал эту небольшую тестовую программуnoway.c int proveit() { unsigned int n = 0; while (1) n++; return 0; } int main() { proveit(); return 0; } Тестируя это, я получаю: $ clang -O noway.c $ ./a.out zsh: illegal hardware instruction ./a.out Wat. Если я компилирую …

2
Приведение ссылки на функцию с неверным указателем?
Я отслеживаю ошибку в стороннем коде и сузил ее до чего-то вроде. use libc::c_void; pub unsafe fn foo() {} fn main() { let ptr = &foo as *const _ as *const c_void; println!("{:x}", ptr as usize); } При запуске на стабильной версии 1.38.0 выводится указатель на функцию, но бета (1.39.0-бета.6) …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.