Rozmiar tablicy
Ostatnio zmodyfikowano 2014-03-08 23:49
BrutalxD Temat założony przez niniejszego użytkownika |
Rozmiar tablicy » 2014-03-06 04:08:43 Witam, Czy jest jakiś sposób, żeby pomieścić więcej niż 6433 sudoku w pamięci programu(żebym miał dostęp do każdego)? Jeśli przekraczam tę wartość to program przestaje działać, kompiluje się ale się wyłącza po otworzeniu okna. Jak narazie próbowałem używać tablicy 3-wymiarowej(z czego 1 wymiar to licznik sudoku, 2 i 3 to wiersze i kolumny) i struktury i mieści tyle samo. Proszę o pomoc.
|
|
Monika90 |
» 2014-03-06 12:29:36 Prawdopodobnie tworzysz tę tablicę na stosie, stos ma ograniczony rozmiar. Mozna zwiększyć rozmiar stosu, podając odpowiednie flagi kompilacji. Ale lepiej użyć wektora struktur. struct Sudoku { char plansza[ 9 ][ 9 ]; };
std::vector < Sudoku > tab( 99999 );
|
|
michal11 |
» 2014-03-06 20:57:00 I tak nie przekroczysz pewnej granicy zajęcia pamięci. Na win7 jest to bodajże 2GB |
|
BrutalxD Temat założony przez niniejszego użytkownika |
» 2014-03-06 21:02:48 Nie znam się jeszcze na vektorach i nie wiem dokładnie gdzie to wkleić, ale próbowałem przed deklaracja struktury i po i między funkcjami xD i i tak nic nie dało, crashuje się nadal. Próbowałem też tak jak ty masz i nic. Gdzie to wkleić?
unsigned const N=6300; Rozwiazania tablica[N];
struct Rozwiazania { unsigned sudoku[9][9]; };
|
|
Monika90 |
» 2014-03-06 21:29:59 Może masz błąd gdzie indziej. U mnie działa coś takiego: #include <vector>
struct Sudoku { char plansza[ 9 ][ 9 ]; };
int main() { std::vector < Sudoku > tab( 1000000 ); tab[ 999999 ].plansza[ 8 ][ 8 ] = 9; }
To tworzy milion Sudoku i zajmuje 77 MiB. Jak widzisz, elementy Sudoku są typu char, a nie unsigned, dzięki temu zajmują 4 razy mniej pamięci. |
|
michal11 |
» 2014-03-06 21:54:55 Ok, myślałem, że ta struktura jest bardziej rozbudowana. W takim razie mój komentarz jest tylko czysto informacyjny dla osób którym będzie się wywalał duży program i będą szukali błędów w kodzie. |
|
BrutalxD Temat założony przez niniejszego użytkownika |
» 2014-03-06 22:35:35 Pomijając ten "char", gdzie mam błąd bo, ciągle ograniczenie ponizej 6500 tablic sudoku. #include<vector>
using namespace std;
struct Rozwiazania { unsigned sudoku[ 9 ][ 9 ]; };
main() { vector < Rozwiazania > tab( 1000000 ); tab[ 999999 ].sudoku[ 8 ][ 8 ] = 9; Rozwiazania tablica[ 999999 ]; }
Jak usunę wers z "Rozwiazania tablica[999999]" to wyskakuje mi błąd znak = getch(); switch( znak ) { case 'r': rozwiazywanie( tablica, ilosc ); break; case 'g': generowanie( tablica, ilosc ); break; case 27: break; default: cout << "Nieprawidlowy klawisz!\n"; break; } }
|
|
MrPoxipol |
» 2014-03-06 22:46:20 Kompilator powiedział co masz źle (Staraj się uważnie czytać to co Ci mówi kompilator) ;) |
|
« 1 » 2 |