[c++] Przepełnienie stosu
Ostatnio zmodyfikowano 2017-12-26 19:56
grzeso Temat założony przez niniejszego użytkownika |
[c++] Przepełnienie stosu » 2017-12-25 17:02:21 Witam mam taki kawałeczek kodu #include <iostream>
using namespace std;
class Lotto { int wylosowana[ 6 ]; };
int main() { int liczbaZakladow = 0; cout << "Podaj ilosc zakladow" << endl; cin >> liczbaZakladow; Lotto L[ liczbaZakladow ]; for( int numerZakladu = 0; numerZakladu <= liczbaZakladow; numerZakladu++ ) { cout << numerZakladu << endl; } return 0; }
Ten kod to mocno uproszczony kod programiku do Lotto który sobie piszę. Chce stworzyć milion (albo i kilka milionów) klas Lotto, w każdej klasie ma być 6 wylosowanych liczb. Mój problem polega na tym że jak w MIEJSCU 1 dam tworzenie klas, i tych klas jest milion to program wywala błąd. Jak w MIEJSCU 2 dam tworzenie klas to przy 90 tysiącach stworzonych wywala błąd. Jeśli wywalę wiersz: int wylosowana[ 6 ]; i klasa będzie się tworzyć ale bez niczgo w środku to wywala mi się program przy 6 milionach klas. Błąd: Process returned -1073741571 (0xC00000FD) Z tego co szukałem chodzi o przepełnienie stosu, próbowałem z destruktorem coś, ale bez skutku. Ma ktoś jakiś pomysł na rozwiązanie problemu. Gdzieś w internetach znalazłem że może chodzić o ustawienia Code::Blocks |
|
killjoy |
» 2017-12-25 17:22:41 Tak się nie robi tablic dynamicznych, ponadto ten kod jest niepoprawny. Użyj std::vector, albo stwórz dynamiczną tablicę przy pomocy operatora new. int liczbaZakladow = 0;
cout << "Podaj ilosc zakladow" << endl; cin >> liczbaZakladow;
Lotto L[ liczbaZakladow ];
Przepełnienie stosu dostajesz, gdyż cała ta tablica jest tworzona na stosie, a on ma ograniczoną wielkość - stosunkowo małą w porównaniu do dynamicznej alokacji, przez co kończy się na nim miejsce przy kilku milionach klas. |
|
grzeso Temat założony przez niniejszego użytkownika |
» 2017-12-25 18:51:24 #include <iostream>
using namespace std;
class Lotto { public: int wylosowana[ 6 ]; void proceduraLosowania() { cout << "aa" << endl; } };
int main() { int liczbaZakladow = 0; cout << "Podaj ilosc zakladow" << endl; cin >> liczbaZakladow; Lotto * Zaklad = new Lotto[ liczbaZakladow ]; for( int numerZakladu = 1; numerZakladu <= liczbaZakladow; numerZakladu++ ) { Zaklad[ numerZakladu ].proceduraLosowania(); cout << numerZakladu << endl; } return 0; }
A co myślisz o takim kodzie? funkcja proceduraLosowania() jest tylko dla sprawdzenia |
|
mateczek |
» 2017-12-26 19:56:16 1. tablice indeksujesz od zera for( int i = 0; i < rozmiar; i++ ) 2. jest "new" musi być "delete", lub wskaźniki inteligentne, lub jakiś kontener np "std::vector" |
|
« 1 » |