undefined-behavior

Nieokreślone zachowanie i punkty sekwencji

Co to są "punkty sekwencji"? Jaka jest relacja między nieokreślonym zachowaniem a punktami sekwencji? Często używam zabawnych ... ci zaczął się pomysł FAQ, więc Twoja odpowiedź najprawdopodobniej zostanie przeczytana przez tych kto wpadł na ten pomysł.)_

Jakie są typowe nieokreślone zachowania, o których programista C++ powinien wiedzieć? [zamknięte]

Jakie są typowe nieokreślone zachowania, o których programista C++ powinien wiedzieć? Powiedz jak: a[i] = i++;

Jaka jest ścisła zasada aliasingu?

Pytając o powszechne, nieokreślone zachowanie w C, dusze bardziej oświecone niż ja odwołałem się do ścisłej zasady aliasingu. O czym oni mówią?

Dlaczego te konstrukcje używają niezdefiniowanego zachowania pre i post-increment?

#include <stdio.h> int main(void) { int i = 0; i = i++ + ++i; printf("%d\n", i); // 3 i = 1; i = (i++) ... 1 1 int x[2] = { 5, 8 }, y = 0; x[y] = y ++; printf("%d %d\n", x[0], x[1]); // shouldn't this print 0 8? or 5 0? }

Dlaczego te konstrukcje używają niezdefiniowanego zachowania przed-i po-inkrementacji?

#include <stdio.h> int main(void) { int i = 0; i = i++ + ++i; printf("%d\n", i); // 3 i = 1; i = (i++) ... 2 2 int x[2] = { 5, 8 }, y = 0; x[y] = y ++; printf("%d %d\n", x[0], x[1]); // shouldn't this print 0 8? or 5 0? }

Nieokreślone, nieokreślone i zdefiniowane w implementacji zachowanie

Jaka jest różnica między niezdefiniowanym, nieokreślonym i zdefiniowanym w implementacji zachowaniem w C i C++?

Czy standard C++ pozwala na niezainicjowaną bool ' a na awarię programu?

Wiem, że "undefined behavior" W C++ może pozwolić kompilatorowi robić wszystko, co chce. Jednak miałem awarię, która mnie za ... przypadku implementacja zakładana że wszystkie Boole będą zawierały tylko 0 LUB 1, a każda inna wartość jest niezdefiniowana?

Undefined behavior and sequence points

Potraktuj ten temat jako kontynuację następującego tematu: Poprzednia odsłona nieokreślone zachowanie i punkty sekwencji ... return *this; } Index & inc() { state++; return *this; } };

Dlaczego to for loop kończy się na niektórych platformach, a nie na innych?

Ostatnio zacząłem uczyć się C i chodzę na zajęcia z C jako przedmiotem. Obecnie bawię się pętlami i natrafiam na dziwne zacho ... Robię to celowo. Po prostu nie mogę zrozumieć, jak zachowanie może być różne w różnych systemach operacyjnych i komputerach.

Dlaczego ta pętla generuje "warning: iteration 3U invokes undefined behavior" i wyświetla więcej niż 4 linie?

Kompilowanie tego: #include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i* ... zdarzyć", ale co to jest przyczyna tego specyficznego zachowania ? Online: http://ideone.com/dMrRKR Kompilator: gcc (4.8)

Kiedy wywołanie funkcji członka na instancji null powoduje nieokreślone zachowanie?

Rozważ następujący kod: #include <iostream> struct foo { // (a): void bar() { std::cout << "gman was h ... reślana jako niezdefiniowane zachowanie. Czy (a) powoduje nieokreślone zachowanie? Co jeśli obie funkcje (i x) są statyczne?

Dlaczego F(i = -1, i = -1) jest niezdefiniowanym zachowaniem?

Czytałem o porządku naruszeń oceny , i dają przykład, który mnie zastanawia. 1) jeśli efekt uboczny na obiekcie skalarnym ... uwagę, że jeśli weźmiemy pod uwagę przeciążone operatory przypisań (a nie zwykłe Skalary), to możemy również wpaść w kłopoty.

Dostęp do nieaktywnego członka Związku i nieokreślonego zachowania?

Odniosłem wrażenie, że dostęp do członka union innego niż ostatni zestaw to UB, ale nie mogę znaleźć solidnego odniesienia (poza odpowiedziami twierdzącymi, że to UB, ale bez wsparcia ze strony standardu). Więc, czy to nieokreślone zachowanie?

Dlaczego integer overflow na x86 z GCC powoduje nieskończoną pętlę?

Poniższy kod przechodzi do nieskończonej pętli na GCC: #include <iostream> using namespace std; int main(){ int ... movq %rbx, %rdi addl $1, %r12d call _ZNSo3putEc movq %rax, %rdi call _ZNSo5flushEv cmpl $3, %r12d jne .L5

Czy" struct hack " jest technicznie niezdefiniowanym zachowaniem?

Pytam o dobrze znaną sztuczkę "ostatni członek struktury ma zmienną długość". Chodzi o coś takiego: struct T { int len; ... sprawę z podejścia C99 do tego, chciałbym, aby odpowiedzi przyklejały się konkretnie do wersji sztuczki wymienionej powyżej.

W praktyce, dlaczego różne Kompilatory obliczają różne wartości int x = ++i + ++i;?

Rozważ ten kod: int i = 1; int x = ++i + ++i; Mamy kilka domysłów co kompilator może zrobić dla tego kodu, zakładając, że ... nego zachowania w programowaniu Bjarne Stroustrupa: zasady i praktyka korzystanie z C++ (C++ 14). Zobaczkomentarz cynamona .

Dlaczego enhanced GCC 6 optimizer łamie praktyczny kod C++?

GCC 6 ma nową funkcję optymalizatora : zakłada, że this zawsze nie jest null i optymalizuje się na tej podstawie. Propaga ... na tym konkretnym nieokreślonym zachowaniu? Nie wyobrażam sobie, żeby ktoś pisał if (this == NULL), bo to takie nienaturalne.

Wykrywanie przepełnienia podpisanego w C / C++

Na pierwszy rzut oka to pytanie może wydawać się duplikatem Jak wykryć całkowite przepełnienie?, jednak w rzeczywistości jes ... signed, i wykonując kontrole przez walcowanie własnych dwóch ' s-complement arytmetyki, ale nie jestem pewien, jak to zrobić.

Jak uzyskać wartość większą niż 8 bitów z 8-bitowej liczby całkowitej?

Wytropiłem bardzo paskudnego robaka, który ukrywa się za tym małym klejnotem. Zdaję sobie sprawę, że zgodnie ze specyfikacją ... -131 ... c: -297 c: -298 // <= Getting ridiculous now. c: -299 c: -300 c: -45 // <= .......... Sprawdź na ideone.

Dlaczego niezdefiniowanym zachowaniem jest usuwanie [] tablicy pochodnych obiektów za pomocą wskaźnika bazowego?

Znalazłem następujący fragment w standardzie C++03 pod 5.3.5 [expr.delete] p3: W pierwszej alternatywie (usuń obiekt ), ... źle zrozumiałam sformułowanie w standardzie? Czy coś przeoczyłem? Dlaczego standard określa to jako nieokreślone zachowanie?