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

question-closed prawdopodobnie za duża tablica

Object Storage Arubacloud
0 głosów
117 wizyt
pytanie zadane 30 października 2021 w C i C++ przez Łosiasty Nowicjusz (190 p.)
zamknięte 31 października 2021 przez Łosiasty

To fragment kodu do zadania z olimpiady błąd najprawdopodobniej wyskakuje dlatego, że tablica jest za duża ale nie wiem jak to naprawić.

#include<iostream>
using namespace std;

int main()
{
	int koniec,n,m,ilosc=0,pion,poziom,numerlitery;
	cin>>n>>m;
	if(n>1000 || m>1000)
	{
		return 0;
	}
	char tablica[n][m];
    int memory[n][m],wyniki[100];

	return 0;
}

Process exited after 3.496 seconds with return value 3221225725

błąd wyskakuje mi przy dużych wartościach(średnio 1000 i 400 lub więcej)

napisałem średnio dlatego, że pomimo wpisywania takich samych wartości wynik nie zawsze wychodzi taki sam

komentarz zamknięcia: rozwiązanie problemu

2 odpowiedzi

0 głosów
odpowiedź 30 października 2021 przez Oscar Nałogowiec (29,290 p.)
wybrane 30 października 2021 przez Łosiasty
 
Najlepsza
1000 * 400 = 400 000.  Nie  jest to jakoś dużo dla dzisiejszego komputera, który na GB ramu, może być problemem tylko na stosie, który zwykle jest limitowany. Po prostu trzeba duże tablice albo allokować statycznie, albo dynamicznie. W pierwszym przypadku wielkość musi być znana w trakcie kompilacji, a w kodzie masz wielkość zmienną. Pozostaje allokacja dynamiczna (malloc albo new). Trzeba tylko pamiętać o zwolnieniu zasobów.
komentarz 30 października 2021 przez j23 Mędrzec (194,920 p.)

1000 * 400 = 400 000.  Nie  jest to jakoś dużo dla dzisiejszego komputera

Tam jest jeszcze tablica int[][], więc nie tylko 400KB, ale jeszcze 1,6MB, co dla stosu może być za dużo.

+2 głosów
odpowiedź 30 października 2021 przez TOM_CPP Pasjonat (22,640 p.)

W standardzie C++ nie ma tablic typu VLA. To co robisz jest niezgodne ze standardem i działa tylko dlatego, że kompilator - którego używasz - pozwala na ich użycie w celu zachowania wstecznej zgodność z językiem C, w którym tego rodzaju tablice były dozwolone.

Rozwiązaniem jest użycie kontenera std::vector, który alokuje dane na stercie i ponadto nie musisz martwić się o ich usuwanie, gdyż kontener robi to za ciebie.

Zamiast

char tablica[n][m];

masz

vector<vector<char>> tablica(n,vector<char>(m));

I dalej używasz ją jak zwykłą tablicę.

Podobne pytania

0 głosów
2 odpowiedzi 192 wizyt
0 głosów
1 odpowiedź 91 wizyt
pytanie zadane 19 marca 2019 w HTML i CSS przez podgorowicz Początkujący (340 p.)
0 głosów
1 odpowiedź 645 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...