Условное перемещение зависит от унитарной переменной C и удвоенного цикла for - PullRequest
0 голосов
/ 20 марта 2020

Я попытался создать простой алгоритм сортировки простых чисел под названием «Сито Эратосфена» и попытался сделать это с помощью двойного for l oop. Но valgrind возвращает предупреждение:

Условное перемещение зависит от неинициализированной переменной из-за выделения стека.

Это способ, которым я написал второе for l oop невозможно в C?

Предполагается, что простые числа меньше 1000000

Вот код:

int range = 1000000;

int main()
{
    int all_nums[range];

    for (int i=2;i<range;i++)
    {
        all_nums[i-2]=i;
    }

    int sieve[range];

    for (int i=0;i<range;i++)
    {
        sieve[i]=0;
    }

    // this is where the problem starts

    int index_sieve = 0;
    float max_sqrt = sqrt(range);

    for (int i = 0; i < range; i++)
    {
        if (all_nums[i] != 0 && all_nums[i]<max_sqrt)
        {
            sito[index_sieve] = all_nums[i];
            index_sieve += 1;
            for (int x = i+1; x<range; x++)
            {
                if (all_nums[x] != 0 && all_nums[x] % all_nums[i] == 0)
                {
                    all_nums[x] = 0;
                }
            }   
        }
        else if (all_nums[i] != 0 && all_nums[i] > max_sqrt)
        {
            sieve[index_sieve] = all_nums[i];
            index_sieve += 1;
        }
    }
}

По сути, это проверяет числа от 2 до 1000000. Если число не равно 0, я сохраняю его и пытаюсь разделить каждое большее число. Если остатка нет, я превращаю это число в 0, второе for l oop заканчивается, а I go возвращается к первому for l oop, чтобы взять другое число.

В строке else if есть небольшое условие, которое гласит: если число, на которое я смотрю, меньше, чем наибольшее число в диапазоне, то это и каждое старшее число простое

Я подозреваю, что я не могу написать вторую for l oop так, но я новичок в C и могу ошибаться, но кроме этого я не могу найти что-нибудь неинициализированное.

...