2010-10-05 14 views
11

Dla celów testowania chciałbym spowodować podział przez zero w moim C++. Napisałem ten kod:Jak spowodować celowy podział przez zero?

int x = 9; 
cout << "int x=" << x; 
int y = 10/(x-9); 
y += 10; 

Widzę "int = 9" wydrukowany na ekranie, ale aplikacja się nie zawiesza. Czy jest to spowodowane niektórymi optymalizacjami kompilatora (kompilowałem z gcc)? Jaki mógł być powód?

+0

Dlaczego zamiast tego nie użyjesz 'abort()'? Inną opcją, której nie można zoptymalizować, jest zapis do wskaźnika NULL. –

+0

@JanHudec W moim przypadku potrzebowałem konkretnie podziału przez zero. Był to wbudowany kod RT i chciałem odtworzyć zachowanie systemu z konkretnym rodzajem awarii. Takie rzeczy czasem się zdarzają, gdy badasz błędy w systemach wbudowanych. – FireAphis

Odpowiedz

16

Wprowadź zmienne volatile. Odczyty i zapisy do zmiennych zmiennych są uważane za możliwe do zaobserwowania:

volatile x = 1; 
volatile y = 0; 
volatile z = x/y; 
+1

Podobało mi się to ... – cateof

+1

Inteligentne używanie języka –

+0

@cateof @John Dzięki. :) – GManNickG

14

Ponieważ y nie jest używany, zostaje zoptymalizowany.
Spróbuj dodać końcówkę cout << y.

Alternatywnie, można wyłączyć optymalizację:

gcc -O0 file.cpp 
+2

Alternatywnie, wyłącz optymalizację :) – Lagerbaer

+0

@ Lager Oczywiście :) – NullUserException

+0

Więc, aby wyjaśnić, w moim binarnym linii z podziałem po prostu nie istnieje, ponieważ zmienna nie jest używana? – FireAphis

-1

Zazwyczaj dzielić przez zero rzuci wyjątek. Jeśli jest nieobsługiwany, przerwie program, ale nie ulegnie awarii.

+0

To jest widok zorientowany na Microsoft - większość środowisk nie tłumaczy wyjątków maszynowych, takich jak dzielenie przez zero na wyjątki C++. –

+1

Nie ma VC++, IIRC w systemie Windows dzielonym przez zero jest domyślnie wyjątkiem SEH. –

+0

Zepsuł program i dał mi nieobsługiwany wyjątek podczas kompilacji. –

2

Podział przez zero jest niezdefiniowanym zachowaniem. Nierozbieranie się jest również właściwym podzbiorem potencjalnie nieskończonej liczby możliwych zachowań w dziedzinie niezdefiniowanego zachowania.

Powiązane problemy