• 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++

0 głosów
121 wizyt
pytanie zadane 5 listopada 2021 w C i C++ przez HUBSON2912 Użytkownik (700 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 (41,900 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 (322,460 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 Użytkownik (700 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 (41,900 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ź 135 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 115 wizyt
pytanie zadane 26 września 2018 w C i C++ przez Mick_SQ6IYV Użytkownik (960 p.)

88,721 zapytań

137,332 odpowiedzi

306,822 komentarzy

58,907 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...