Articles of comportamento indefinido

Isso é um comportamento C indefinido?

A nossa turma foi questionada sobre esta questão pelo prof de programação em C: Você recebe o código: int x=1; printf(“%d”,++x,x+1); Qual saída será sempre produzida? A maioria dos estudantes disse comportamento indefinido. Alguém pode me ajudar a entender por que isso acontece? Obrigado pela edição e pelas respostas, mas ainda estou confuso.

Então, por que i = ++ i + 1 é bem definido em C ++ 11?

Eu vi as outras perguntas semelhantes e li o defeito sobre isso. Mas ainda não entendi. Por que i = ++i + 1 bem definido em C ++ 11 quando i = i++ + 1 não é? Como o padrão faz isso bem definido? Ao elaborar, tenho o seguinte sequenciado antes do gráfico (em que […]

Por que char * causa comportamento indefinido enquanto char não faz?

A tentativa de modificar um literal de string causa um comportamento indefinido: char * p = “wikipedia”; p[0] = ‘W’; // undefined behaviour Uma maneira de evitar isso é defini-lo como uma matriz em vez de um ponteiro: char p[] = “wikipedia”; p[0] = ‘W’; // ok Por que char* causa comportamento indefinido, enquanto char[] […]

É a saída de printf (“% d% d”, c ++, c); também indefinido?

Recentemente me deparei com um post Qual é a resposta correta para cout << c ++ << c ;? e queria saber se a saída de int c = 0; printf (“%d %d”, c++, c); também é indefinido? Eu estudei em palestras que post-fix e prefixar valor de incremento de operadores somente depois de obter […]

Acessar matriz além do limite em C e C ++

int data[8]; data[9] = 1; O que o padrão c ++ diz sobre isso? Esse comportamento é indefinido? Pelo menos o compilador C (gcc-std = c99 -pedantic -W-Wall) não diz nada sobre isso. Obrigado.

Uma implementação de C ++ que detecta comportamento indefinido?

Um grande número de operações em C ++ resulta em um comportamento indefinido, em que a especificação é completamente muda em relação ao comportamento do programa e permite que qualquer coisa aconteça. Por causa disso, existem todos os tipos de casos em que as pessoas têm código que compila no modo de debugging, mas não […]

Por que o otimizador aprimorado do GCC 6 quebra o código C ++ prático?

O GCC 6 tem um novo recurso de otimizador : ele pressupõe que this não é sempre nulo e otimiza com base nisso. Propagação de intervalo de valor agora assume que o ponteiro this de funções de membro do C ++ é não-nulo. Isso elimina checagens de pointers nulos comuns, mas também quebra algumas bases […]

Destruidor virtual e comportamento indefinido

Esta questão é diferente de ‘ Quando / por que devo usar um destruidor virtual ? ‘. struct B { virtual void foo (); ~B() {} // <— not virtual }; struct D : B { virtual void foo (); ~D() {} }; B *p = new D; delete p; // D::~D() is not called […]

Perto do tempo constante de rotação que não viola os padrões

Eu estou tendo um longo tempo tentando chegar a uma rotação constante de tempo que não viola os padrões C / C ++. O problema são os casos de borda / canto, onde as operações são chamadas em algoritmos e esses algoritmos não podem ser alterados. Por exemplo, o seguinte é do Crypto ++ e […]

Posso pegar o endereço do elemento one-last-the-end de uma matriz?

Duplicar Possível: Pegue o endereço de um elemento de array passado-a-fim via subscrito: legal pelo padrão C ++ ou não? int array[10]; int* a = array + 10; // well-defined int* b = &array[10]; // not sure… A última linha é válida ou não?