• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Własny komunikat o braku pamięci

Object Storage Arubacloud
0 głosów
136 wizyt
pytanie zadane 25 stycznia 2019 w C i C++ przez dawid2002 Mądrala (5,190 p.)
zamknięte 25 stycznia 2019 przez dawid2002

Witam! Przerabiam materiał w pdf 'ie autorstwa Karola kuczmarskiego (Xion) Kurs C++ . Pisze on w swoim kursie że:

"Jeśli przy alokacji pamięci przez operator new , zabraknie pamięci to operator ten zwraca wartość NULL".

Dlatego właśnie napisałem taki kod:

if(wskaznik == NULL)
     cout << "Niestety zabraklo pamieci!";

Ten fragment kodu ma wyświetlić komunikat o braku pamięci. Problem polega na tym że nie wyświetla tego komunikatu!

Jaki kod musiałbym napisać aby taki komunikat pojawił się na ekranie zamiast zwykłego crasha?

komentarz zamknięcia: znam już odpowiedź

3 odpowiedzi

+1 głos
odpowiedź 25 stycznia 2019 przez adrian17 Ekspert (344,860 p.)
wybrane 25 stycznia 2019 przez dawid2002
 
Najlepsza
Tekst z kursu jest fałszywy.

Jeśli nie uda się alokacja, będzie rzucony wyjątek std::bad_alloc. Zwykły `new` z definicji nie może zwrócić nullptr - ba, jeśli spróbujesz porównać wynik do NULLa, jest możliwość że kompilator usunie tego `if`a (bo wie, że nigdy się nie spełni).

W dodatku, na współczesnych systemach alokacja pamięci nie jest aż taka prosta - na przykład możliwe, że `new` dostanie od systemu "obietnicę" pamięci i nigdy nie rzuci wyjątku, ale system potem stwierdzi że jednak nie ma dość pamięci i sam zabije program.
komentarz 25 stycznia 2019 przez dawid2002 Mądrala (5,190 p.)

Dzięki za odpowiedź , masz ode mnie naj yes

+2 głosów
odpowiedź 25 stycznia 2019 przez j23 Mędrzec (194,920 p.)

Problem polega na tym że nie wyświetla tego komunikatu!

Zwykły new nie zwraca nullptr przy braku pamięci. Rzuca wyjątek std::bad_alloc. Jak chcesz mieć nulla, użyj new(std::nothrow).

+1 głos
odpowiedź 25 stycznia 2019 przez Secrus Nałogowiec (32,880 p.)
Zgaduje, że musiałbyś doprowadzić do zapełnienia pamięci komputera (lub urządzenia, na które piszesz). Nie jestem jednak pewien czy mechanizmy bezpieczeństwa systemów operacyjnych pozwolą doprowadzić do tego stanu.
komentarz 25 stycznia 2019 przez dawid2002 Mądrala (5,190 p.)
Tak. Chciałem zapełnić całą pamięć RAM , aby był taki komunikat. Tylko zastanawia mnie dlaczego skoro dzisiejsze systemy operacyjne nie pozwalają na to , to dlaczego w C++ jest taka funkcja set_new_hadler() , która w takim przypadku wywołuje naszą funkcje która może taki komuniakt wyświetlić.
komentarz 25 stycznia 2019 przez Secrus Nałogowiec (32,880 p.)
Myślisz tylko w zakresie komputerów, a c++ jest szeroko używany w urządzeniach embedded, gdzie do takiej sytuacji może dojść, wtedy tego typu funkcje mogą być użyteczne
komentarz 25 stycznia 2019 przez dawid2002 Mądrala (5,190 p.)

Dobra , dziękuje za odpowiedź będę pamiętał! smiley

Podobne pytania

+1 głos
1 odpowiedź 333 wizyt
0 głosów
0 odpowiedzi 202 wizyt
0 głosów
1 odpowiedź 168 wizyt

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...