Preguntas con la etiqueta [undefined-behavior]
Detectando desbordamiento firmado en C/C++
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
¿Es la variable local no inicializada el generador de números aleatorios más rápido?
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
¿Necesito convertir a un carácter sin firmar antes de llamar a toupper(), tolower(), et al.?
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).
Eliminación de C++: ¿elimina mis objetos pero aún puedo acceder a los datos?
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();
¿Dónde dice exactamente el estándar C++ que desreferenciar un puntero no inicializado es un comportamiento indefinido?
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
¿Por qué se define el comportamiento de desbordamiento de enteros sin signo pero no de desbordamiento de enteros con signo?
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
¿Por qué estas construcciones utilizan un comportamiento indefinido previo y posterior al incremento?
#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
Comportamiento indefinido, no especificado y definido por la implementación
¿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
¿Por qué fluir desde el final de una función no nula sin devolver un valor no produce un error de compilación?
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
¿Cuándo la invocación de una función miembro a través de un puntero nulo da como resultado un comportamiento indefinido?
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 `reinterpret_cast`ing entre el puntero vectorial SIMD de hardware y el tipo correspondiente un comportamiento indefinido?
¿ 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 =
¿El desbordamiento de enteros con signo sigue siendo un comportamiento indefinido en C++?
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 y cómo se relacionan con el comportamiento indefinido?
¿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