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

Dlaczego program działa dla niezadeklarowanej "przestrzeni" tablicy?

Object Storage Arubacloud
0 głosów
260 wizyt
pytanie zadane 3 czerwca 2015 w C i C++ przez John Doe Obywatel (1,720 p.)

Program pobiera z pliku "promienie.txt" trzy promienie kół - każdy w kolejnej linii. Następnie oblicza owych pole i zapisuje je w pliku "wyniki.txt".

Dlaczego, jeśli deklaruję tablicę dynamiczną o 2 elementach, to program działa nawet przy ich większej ilości? (np. gdy w notatniku jest 5 linii, czyli 5 promieni). 

Czy wówczas nie powinien wyskakiwać jakiś błąd krytyczny? W końcu wchodzę w przestrzeń pamięci, gdzie może być zadeklarowana jakaś inna zmienna. 

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main()
{    
 fstream p1,p2;
 int s=0;
 
 
 p1.open("promienie.txt", ios::in);
 if(p1.good()==false) exit(0);
 p2.open("wynik.txt", ios::out);
 if(p2.good()==false) exit(0);
 
 int *x = new int[2];
 while(!p1.eof())
 {
  p1>>x[s];
  s++;
 }
 
 for(int i=0; i<s; i++)
 {
  p2<<i+1<<" pole: "<<M_PI*x[i]*x[i]<<endl;
 }
 
 delete [] x;
 p1.close();
 p2.close();
 
 return 0;   
}

Przykładowa zawartość pliku "promienie.txt": 

23
5
2
4
6

 

2 odpowiedzi

+1 głos
odpowiedź 3 czerwca 2015 przez Radfler VIP (101,030 p.)
Wyszedłeś poza zakres tablicy, jednak: 1. Nic nie zapisujesz w tym miejscu -> tylko odczytujesz 2. Możliwe, że ten obszar pamięci już należy do Twojego programu -> zapisujesz/odczytujesz inną swoją zmienną Pozdrawiam ☺
komentarz 3 czerwca 2015 przez John Doe Obywatel (1,720 p.)
Dziękuję bardzo za odpowiedź! :)
+1 głos
odpowiedź 3 czerwca 2015 przez hit02 Nałogowiec (33,970 p.)
edycja 4 czerwca 2015 przez hit02
Program może nie crashnąć przy buffer overflow, jeśli pamięć za buforem należy do ciebie (na pszykład są tam inne dane, lub z jakiegoś innego powodu dostałeś tyle pamięci) i nie ma tam ważnych danych dla działania programu.

Jeśli tak się zdaży, to często program nawet działa normalnie nie licząc tego, że jest podatny na ataki.
komentarz 3 czerwca 2015 przez draghan VIP (106,230 p.)
Sam Windows od bodajże wersji 7 (może od Visty?) ma jedną bardzo ciekawą właściwość działania, czego nie było we wcześniejszych wersjach, a w innych systemach to niemal zbrodnia.

Nie mogę teraz znaleźć artykułu, w którym to było opisane, nawet nie mogę wpaść na sensowne słowa kluczowe, które mogłyby mnie nakierować na tenże artykuł, a czytałem go dość dawno temu i mogłem coś przekręcić teraz. :/

Ale w skrócie - system NAKAZUJE dalsze działanie programu, który naruszył, np. zasady dostępu do pamięci. I pozostawia taką aplikację działającą, chyba licząc na to, że owa się ustabilizuje. To często powoduje crashe w randomowych miejscach, które bardzo ciężko się debuguje.

Jak znajdę ten artykuł, a szukam teraz usilnie, bo sam jestem ciekaw jak to dokładnie było, to podrzucę. :)
komentarz 3 czerwca 2015 przez hit02 Nałogowiec (33,970 p.)

Jak byś znalazł, to chętnie przeczytam, bo moim zdaniem trochę to nie logiczne. smiley

Z doświadczenia też raczej nie pamiętam takich dziwnych przypadków, aczkolwiek ja większość czasu spędzam na XP, więc może rzeczywiście na nowszych systemach jest inaczej.

komentarz 6 czerwca 2015 przez draghan VIP (106,230 p.)

Znalazłem, po ciężkich poszukiwaniach. :D Ale popytałem o ten artykuł na forach, na których - zdawało mi się - mogłem się na niego kiedyś natknąć.

Trochę jest inaczej, niż pamiętałem, ale anyway - miłej lektury!

https://randomascii.wordpress.com/2012/07/05/when-even-crashing-doesnt-work/

Daj znać, co o tym sądzisz. :)

komentarz 7 czerwca 2015 przez hit02 Nałogowiec (33,970 p.)
Hah, tak myślałem, że to nie jest do końca tak, jak pisałeś wyżej, ale rzeczywiście ciekawy artykuł. Wyjątki, to w ogóle jest ciekawy temat, a szczególnie ich przechwytywanie.

Podobne pytania

0 głosów
2 odpowiedzi 158 wizyt
pytanie zadane 14 października 2016 w C i C++ przez Kuba321 Użytkownik (730 p.)
0 głosów
4 odpowiedzi 1,032 wizyt
pytanie zadane 28 maja 2015 w C i C++ przez DavidMCPolska Bywalec (2,770 p.)
0 głosów
1 odpowiedź 517 wizyt
pytanie zadane 12 lutego 2016 w C i C++ przez konrad99 Gaduła (4,090 p.)

92,584 zapytań

141,433 odpowiedzi

319,668 komentarzy

61,966 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!

...