Articles of comportamento indefinido

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 […]

Esta recursion infinita é UB?

Em C ++ 11, como um loop infinito sem efeitos colaterais, o programa a seguir é UB: int main() { while (true) {} } O seguinte também é UB? void foo() { foo(); } int main() { foo(); } Citações do padrão para ambos os programas seriam ideais.

Por que desreferenciando um ponteiro nulo é um comportamento indefinido?

De acordo com o ISO C ++, desreferenciando um ponteiro nulo é um comportamento indefinido. Minha curiosidade é por quê? Por padrão decidiu declarar comportamento indefinido? Qual é a razão por trás dessa decisão? Dependência do compilador? Não parece, porque de acordo com o padrão C99, tanto quanto eu sei, é bem definido. Dependência de […]

Por que está fora de limites a aritmética do ponteiro de comportamento indefinido?

O exemplo a seguir é da Wikipedia . int arr[4] = {0, 1, 2, 3}; int* p = arr + 5; // undefined behavior Se eu nunca desreferencia p, então por que arr + 5 é um comportamento indefinido? Espero que os pointers se comportem como inteiros – com a exceção de que, quando não […]

Bug de compilation C ++?

Eu tenho o seguinte código: #include #include using namespace std; int main() { complex delta; complex mc[4] = {0}; for(int di = 0; di < 4; di++, delta = mc[di]) { cout << di << endl; } return 0; } Espero que ele produza “0, 1, 2, 3” e pare, mas gera uma série interminável […]

Por que não devo tentar usar o valor “this” depois de “delete this”?

Neste parágrafo de C ++, o uso de FAQ de delete this construct é discutido. 4 restrições estão listadas. Restrições 1 a 3 parecem bastante razoáveis. Mas por que é a restrição 4 que eu “não devo examiná-lo, compará-lo com outro ponteiro, compará-lo com NULL, imprimi-lo, lançá-lo, fazer qualquer coisa com ele”? Quero dizer, this […]

Está acessando um array global fora do seu comportamento indefinido?

Eu acabei de fazer um exame na minha aula hoje – lendo código C e input, e a resposta necessária foi o que aparecerá na canvas se o programa realmente rodar. Uma das questões declarou a[4][4] como uma variável global e em um ponto desse programa, ele tenta acessar a[27][27] , então eu respondi algo […]

Posso tratar uma matriz 2D como uma matriz 1D contígua?

Considere o seguinte código: int a[25][80]; a[0][1234] = 56; int* p = &a[0][0]; p[1234] = 56; A segunda linha invoca um comportamento indefinido? Como sobre a quarta linha?

Comportamento indefinido e pontos de sequência recarregados

Considere este tópico uma sequela do seguinte tópico: Parcela anterior Comportamento indefinido e pontos de sequência Vamos revisitar essa expressão engraçada e complicada (as frases em itálico são tiradas do tópico acima * sorriso *): i += ++i; Dizemos que isso invoca um comportamento indefinido. Presumo que, quando dizemos isso, assumimos implicitamente que o tipo […]

Por que esse loop produz “warning: iteration 3u invoca comportamento indefinido” e gera mais de 4 linhas?

Compilando isso: #include int main() { for (int i = 0; i < 4; ++i) std::cout << i*1000000000 << std::endl; } e o gcc produz o seguinte aviso: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i*1000000000 << std::endl; ^ Eu entendo que há um estouro de inteiro assinado. O que eu não consigo […]