[C++]Powtarzanie w nieskończoność jednej funkcji

Witam

Uczę się dopiero w C++, ale za boga nie wiem jak zrobić aby w nieskończoność powtarzał funkcję

spam

void spam()

{

	std::cout << "spam" << std::endl;

}

gdy

if (haslo<997)

	{

		std::cout <<"Zle haslo"<< std::endl;


				}

Pozdrawiam

Chyba nie do końca zrozumiałem, ale jeśli chcesz powtarzać jakieś instrukcje w nieskończoność wystarczy:

while(true)

{

     // jakiś kod

}

lub

while(1)

{

     // jakiś kod

}

Poza tym polecam Ci użycie tzw. przestrzeni nazw standardowych (przed int main i innymi funkcjami, zaraz przed definiowaniem zmiennych); dzięki temu nie będziesz musiał pisac przy każdym cin’ie, cout’cie, endl’inie etc. tego ‘std::’.

using namespace std;

np.:

#include 

using namespace std;

int x;


int main()

{

     cin >> x;

     cout << x << endl;


     return 0;

}

Aha, w ogóle to jak zaczynasz swoją przygodę z c++ to zamiast cin i cout radzę Ci używać funkcji printf i scanf. Są to funkcje wczytujące pochodzące z klasycznego C, ale działają dużo szybciej, aniżeli cin i cout.

Jakbyś miał jeszcze pytania - pisz.

Pozdrawiam.

Mi chodzi o to że jak koleś wprowadzi hasło mniejsze niż 997 zaczyna mu się jeden wielki spam, czyli ciągle w okienku konsoli pojawia się napis

spam

spam

spam

spam

spam

spam

spam

spam

itd.

No to mozesz to zapisać np. tak:

if (haslo<997)

{

     while(1)

     {

          std::cout <<"spam"<< std::endl;

     }

}

Co się stanie jakbym zostawił wyłączony taki spam bardzo długo ? “Zamuli” komputer po dłuższym czasie ?

Nie.

Przepełnienie stosu może prowadzić do zawieszenia komputera?

void foo()

{

  bar();

}

void bar()

{

  foo();  

}

Myślę, że system wywłaszczy proces, który pochłonie za dużo zasobów, przynajmniej ja bym to zapewnił pisząc system. Pozatym to smieszne stos zajmuje z góra 1024kb, jak chciałeś zając całą dostępną pamięć to może realloc w pętli co 100 mb na przykład. Ale i tak jak bedzie za dużo system po prostu ukiluje delikwenta.

@down

myślałem o tym, zeby zajmowac ciągłym fragmentem (do tego trzeba zwolnić poprzednią i zaalokować np. x2 w stosunku do tego co było) - w teorii jest większa szansa na niewpasowanie się w istniejące już luki i szybszy crash programu. Aczkolwiek przy skoku 100 mb ma to marginalne znaczenie.

Przy przepełnieniu stosu system ubije proces. Pamięć można zajmować “w nieskończoność”(dopóki się nie skończy, potem malloc/new będzie zwracał null/rzucał wyjątkiem), bo czemu niby system miałby zabijać wtedy proces? Może potrzebuje tak dużo pamięci?

@up: nie realloc tylko malloc, bo realloc najpierw zwalnia przydzieloną pamięć.

Ciężko dyskutować z faktami.

Tak czy inaczej próby takie jak te to dziwny sposób komunikacji, że ktoś przekroczył dostępną ilość prób logowania. Nie lepiej dodać jakiś klucz do rejestru i najzwyczajniej przy uruchomieniu odczytać go i jeśli wynosi ileś to powiedzieć sorry nie możesz się zalogować? Twój pomysł, by mieć to w RAM jest z goła nie trafiony. Wystarczy zrobić n-1 logowań oraz reset aplikacji, aby to obejść.

A co do forka, zmień avatar ciebie proszę: fork to program unixowy. Jeśli chcesz potworzyć wątki albo procesy na windowsie w google wystarczy wpisać. Nie mniej myślę, że nawet windows ma jakiś awaryjną przestrzeń, w której uruchomi usługę, która ubije program tworzący za dużą liczbę wątków. Więc co najwyżej zamulisz komuś komputer na pare chwil.