Articles of comportamento indefinido

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?

Usando a variável recém-declarada na boot (int x = x + 1)?

Eu acabei de me deparar com um comportamento que me surpreendeu: Ao escrever: int x = x+1; em um programa C / C ++ – (ou até mesmo uma expressão mais complexa envolvendo a recém criada variável x) meu gcc / g ++ compila sem erros. No caso acima, X é 1 depois. Observe que […]

Múltiplas mutações dentro de listas de inicializadores são comportamentos indefinidos?

Estou curioso sobre listas de inicializadores e pontos de sequência. Eu li há algum tempo que a ordem de avaliação nas listas de inicializadores é da esquerda para a direita. Se é assim, então deve haver algum tipo de ponto de seqüência entre os pontos de avaliação, estou errado? Então, com isso dito é o […]