Articles of comportamento indefinido

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

Por que expressões constantes têm uma exclusão por comportamento indefinido?

Eu estava pesquisando o que é permitido em uma expressão constante * , que é abordada na seção 5.19 Expressões constantes, parágrafo 2 do padrão C ++, que diz: Uma expressão condicional é uma expressão constante central a menos que envolva um dos seguintes itens como uma subexpressão potencialmente avaliada (3.2), mas subexpressões de operações […]

Como uma variável no mesmo endereço produz 2 valores diferentes?

Considere isto : #include using namespace std; int main(void) { const int a1 = 40; const int* b1 = &a1; char* c1 = (char *)(b1); *c1 = ‘A’; int *t = (int*)c1; cout << a1 << " " << *t << endl; cout << &a1 << " " << t << endl; return 0; } […]

Como o emparelhamento new com delete pode levar a vazamentos de memory apenas?

Primeiro de tudo, usando delete para qualquer coisa alocada com new[] é o comportamento indefinido de acordo com o padrão C ++. No Visual C ++ 7 tal emparelhamento pode levar a uma das duas consequências. Se o tipo new [] ‘ed tiver um construtor e um destruidor triviais, o VC ++ simplesmente usa o […]

Por que o estouro de inteiro no x86 com o GCC causa um loop infinito?

O código a seguir entra em um loop infinito no GCC: #include using namespace std; int main(){ int i = 0x10000000; int c = 0; do{ c++; i += i; cout << i < 0); cout << c << endl; return 0; } Então, eis o seguinte: Estouro de inteiro assinado é um comportamento tecnicamente […]

O estouro de inteiro assinado é ainda um comportamento indefinido em C ++?

Como sabemos, o estouro de inteiro assinado é um comportamento indefinido . Mas há algo interessante na documentação do C ++ 11 cstdint : tipo inteiro assinado com largura de exatamente 8, 16, 32 e 64 bits, respectivamente, sem bits de preenchimento e usando o complemento de 2 para valores negativos (fornecido somente se a […]