Preguntas con la etiqueta [undefined-behavior]

Lista undefined-behavior preguntas

Detectando desbordamiento firmado en C/C++

13
respuestas
101
votos
45.5k
vistas

A primera vista, esta pregunta puede parecer un duplicado de ¿Cómo detectar el desbordamiento de enteros? , sin embargo, en realidad es significativamente diferente. Descubrí que, si bien detectar un

Sé que la variable local no inicializada tiene un comportamiento indefinido ( UB ), y también el valor puede tener representaciones trampa que pueden afectar el funcionamiento posterior, pero a

Hace un tiempo, alguien con gran reputación aquí en Stack Overflow escribió en un comentario que es necesario emitir un charargumento unsigned charantes de llamar std::touppera y std::tolower(y funciones similares).

He escrito un juego de tetris sencillo y funcional en el que cada bloque es una instancia de un bloque único de clase. class SingleBlock { public: SingleBlock(int, int); ~SingleBlock();

Hasta ahora no encuentro cómo deducir lo siguiente: int* ptr; *ptr = 0; es un comportamiento indefinido. En primer lugar, está 5.3.1/1 que indica que *significa indirección que se convierte

El desbordamiento de enteros sin signo está bien definido por los estándares C y C++. Por ejemplo, la norma C99 ( §6.2.5/9) establece Un cálculo que involucra operandos sin signo

#include <stdio.h> int main(void) { int i = 0; i = i++ + ++i; printf("%d\n", i); // 3 i = 1; i = (i++); printf("%d\n", i); // 2 Should be

¿Qué es el comportamiento indefinido (UB) en C y C++? ¿Qué pasa con el comportamiento no especificado y el comportamiento definido por la implementación ? ¿Cuál es la diferencia entre

Desde que me di cuenta hace muchos años de que esto no produce un error de forma predeterminada (al menos en GCC), siempre me he preguntado por qué. Entiendo que

Considere el siguiente código: #include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): void baz() { x = 5;

¿ Es legal acceder reinterpret_casta float*objetos a través de un tipo de puntero diferente?__m256*float constexpr size_t _m256_float_step_sz = sizeof(__m256) / sizeof(float); alignas(__m256) float stack_store[100 * _m256_float_step_sz ]{}; __m256& hwvec1 =

Como sabemos, el desbordamiento de enteros con signo es un comportamiento indefinido . Pero hay algo interesante en cstdintla documentación de C++11: tipo entero con signo con un ancho de

¿Qué son los "puntos de secuencia"? ¿Cuál es la relación entre el comportamiento indefinido y los puntos de secuencia? A menudo uso expresiones divertidas y complicadas como a[++i] = i;para