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
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.