Symulacja zawieszenia programu

0

Witam,
Potrzebował bym wiedzieć jak za symulować "zawieszenie programu", tak aby program wyrzucił błąd programu (zawiesił się i wyłączył). Jest to potrzebne do scheduera...

Z góry dzięki ;)

2
void Seppuku( long long a = 0 )
{
	Seppuku(++a)	;
}

int main() {
	Seppuku();
	return 0;
}
0

Ja bym stawiał na dereferencje nulla, ale nie wiem czy jest jakiś sposób na wysypanie programu który nie byłby UB albo zależny od implementacji

int* x = (int*)0;
x*=1;

Bo na przykład stackoverflow u góry może nie wystąpić bo kompilator mógłby tą funkcję usunąć albo mógłby mieć optymalizacji rekurencji ogonowej i program kręciłby się w nieskończoność...

1

zawiesił się i wyłączył

Zawiesił to nie to samo co wyłączył. Zawieszenie masz tak:

for(;;);
0

Może wyjątek jakiś? Dzielenie przez zero? Albo

long long *ptr;
while (true)
  ++ptr;

edit: to powinno pięknie zawiesić program:
http://pastebin.com/9UNHuBtt

0

Pytanie - co Ty w zasadzie chcesz zrobić i gdzie chcesz to zawieszenie wołać? Bo jak dla potrzeb przetestowania obsługi czegoś to gdb ma coś takiego jak call...

0

Chodzi mi o coś takiego, że jeśli nie zostanie spełniony określony warunek (w tym wypadku poprawne wczytanie pliku) program ma się zawiesić, aby scheduler nie wysyłał wiadomości, że program się wykonał skoro tego nie zrobił (brak wczytania pliku jest równoznaczne z niewykonaniem programu).

2

NO TO LOL :D

Tu masz ekstremalny przypadek jak do tego sie podchodzi

http://www.cplusplus.com/reference/cstdlib/abort/

ale ogolnie wystarczy sprawdzic czy plik sie wczytal czy nie, jezeli nie to mozesz zrobic chocby return albo cos wyswietlic albo zapetlic i probowac wczytac jeszcze raz albo milion innych rzeczy

0

(brak wczytania pliku jest równoznaczne z niewykonaniem programu)

Nie czaje. Chcesz, żeby program wisiał w nieskończoność? Po co? Jeżeli chcesz określić czy program(proces) wykonał się poprawnie to nie zawieszaj go tylko odczytaj co proces zwrócił.

0

@Kremius klasyczny przykład kiedy ktoś na forum pyta "jak zrobić cuda na kiju" a okazuje się że żadne cuda nie są potrzebne tylko autor prosty problem próbuje rozwiazać na około.
Zrób po prostu System.exit(-1) a w tym drugim procesie który monitoruje wykonanie (bo rozumiem że masz jakiś drugi proces który sprawdza czy się wykonało) sprawdź kod wyjścia programu. Jeśli 0 to jest ok a jeśli nie to coś poszło nie tak.

2
Kremius napisał(a):

Chodzi mi o coś takiego, że jeśli nie zostanie spełniony określony warunek (w tym wypadku poprawne wczytanie pliku) program ma się zawiesić, aby scheduler nie wysyłał wiadomości, że program się wykonał skoro tego nie zrobił (brak wczytania pliku jest równoznaczne z niewykonaniem programu).

Od tego jest http://www.cplusplus.com/reference/cassert/assert/
albo jak ktoś napisał wyżej abort()

Poza tym zgadzam się z Shalom pytanie zostało źle postawione. Jesteś początkujący, więc zawsze opsuj pierwotny problem, a nie jak wykonać twój pomysł na rozwiązanie problemu, którego nam nie ujawnisz.

0

OK. A jeszcze jedno.
Czy mogę jakoś przejść do następnego kroku pętli jeśli warunek się nie wykona.
Tzn. chciałbym zrobić tak, aby jakaś część kodu wykonywała się kilka razy (ok. 10 razy). Problem w tym, ze wewnątrz jest jest część kodu sprawdzająca, czy dany plik się udało wczytać, jak można się domyślić program idzie dalej po poprawnym wczytaniu pliku. W momencie, kiedy plik się nie wczyta program ma iść do kolejnego "przejścia" pętli.

W efekcie jeśli plików będzie 5 (nazwa kolejnego jest o 1 większa) to pętla wykona się 10 razy z czego 5 plików wczyta a reszta to będą "puste przejścia" pętli, na czym w tym przypadku mi zależy.

Jakieś pomysły ??

0

continue

1 użytkowników online, w tym zalogowanych: 0, gości: 1