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

question-closed Co to znaczy? Błąd kompilacji z tablicą w C++

VPS Starter Arubacloud
0 głosów
513 wizyt
pytanie zadane 5 listopada 2021 w C i C++ przez HUBSON2912 Obywatel (1,410 p.)
zamknięte 6 listopada 2021 przez HUBSON2912

Już znalazłem odpowiedź

 

Witam,

mam zadanie gdzie  2<=L<U<= 2147483647 zatem tablicę muszę zrobić na wielkość 2147483648 lub większą. Jednak gdy daje takie rozmiary wyskakuje błąd kompilacji z informacją:

/home/Tc2hpj/ccXXok3X.o: in function `_GLOBAL__sub_I_tab':
prog.cpp:(.text.startup+0x167): relocation truncated to fit: R_X86_64_PC32 against `.bss'
prog.cpp:(.text.startup+0x185): relocation truncated to fit: R_X86_64_PC32 against `.bss'
collect2: error: ld returned 1 exit status

gdy tworzę mniejszą tablicę to zadanie nie przechodzi. Co oznacza ten błąd, jak go naprawić i przy okazji czy są jakieś górne ograniczenia dotyczące wielkości tablicy?

Kod:

#include <bits/stdc++.h>
using namespace std;
bool tab[2147483648];
void sitoEratostenesa()
{
	tab[0]=tab[1]=1;
	for(long long i=2; i*i<2147483648; i++)
	{
		if(!tab[i])
			for(long long j=i*i; j<2147483648; j+=i)
				tab[j]=1;
	}
}
int main() 
{
	sitoEratostenesa();
	long long n,a,b;
	cin>>n;
	while(n--)
	{
		cin>>a>>b;
		for(int i=a; i<=b; i++)
			if(!tab[i])
				cout<<i<<"\n";
	}
	return 0;
}

a tu zadanie jeśli coś pomoże https://www.spoj.com/WSDOCPP/problems/BFN2/

komentarz zamknięcia: Już mam
1
komentarz 5 listopada 2021 przez tkz Nałogowiec (42,020 p.)
Alokujesz "statycznie" dwa gigabajty, to nigdzie nie przejdzie. Poczytaj o dynamicznej alokacji pamięci. Dodatkowo, gdzie w zadaniu jest napisane, że zawsze będzie to 2147483648 pozycji?
komentarz 5 listopada 2021 przez adrian17 Ekspert (349,240 p.)

Plus, pomijając fakt że statyczna tablica 2GB w ogóle nie ma sensu, to zwykła dynamiczna w tym zadaniu też może się nie zmieścić:

Limit pamięci: 1536MB

(Ale i tak warto na początek spróbować)

komentarz 6 listopada 2021 przez HUBSON2912 Obywatel (1,410 p.)

@tkz, pisałem, że w zadaniu jest tak powiedziane, a jeśli tworzę choć o 1 mniejszą tablicę to zadanie nie przechodzi. Ale dzięki

komentarz 6 listopada 2021 przez tkz Nałogowiec (42,020 p.)

Precyzując. Tworzenie na sztywno tablicy o takim rozmiarze mija się z celem i jest straszne marnotrawstwo. Tworzysz tablice o rozmiarze  U i tyle.

Podobne pytania

0 głosów
1 odpowiedź 191 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 393 wizyt
pytanie zadane 26 września 2018 w C i C++ przez Mick_SQ6IYV Obywatel (1,020 p.)

92,973 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...