Alokacja pamięci

0

public:
serch(void);
~serch(void);
---------- ZMIENNE
int i;
int r;
int j;
int a;
int b;
bool num_tab[];
--------- FUNKCJE
int sit();
---------

Tutaj przedstawiam kod pliku header mojej klasy

int serch::sit()
{
for (int i = a; i*i <= b; i++ )
{
if (num_tab[i] == true)
continue;
for (j = 2 * i ; j <= b; j += i)
num_tab[j] = true;
}
return 0;
}

tutaj jest funkcja sit i teraz chciałbym zalokować pamięć gdyż tak jak teraz jest to jest niebezpiecznie i przy większych liczbach się wysypuje ale nie wiem jak w tym kontekscie się za to zabrać. Jest to prosty program do wyszukiwania licz pierwszych, nie ma tutaj wypisywania, gdyż ono jest w formatce.

0

//widzę, że rozmiar num_tab jest <=b, więc w deklaracji klasy
bool num_tab[] zmieniamy na
bool* num_tab;

int serch::sit()
{
num_tab = new bool[b + 1]; //mamy mem-leaka, bo nie zwlaniamy, ale chodzi o to jak zaalokować

    for (int i = a; i*i <= b; i++ )
    {
            if (num_tab[i] == true)
            continue;
            for (j = 2 * i ; j <= b; j += i)
            num_tab[j] = true;
    }
    return 0;

}

a tak w ogóle, to zamiast tablicy bool'i może lepiej zastosowac std::vector<bool>, który sam będzie zarządzał swoją pamięcią. Na początku serch::sit() sprawdzasz czy b>vector::size() i jesli tak, to wywołujesz vector::reserve(), żeby przydzielić więcej pamięci vectorowi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1