Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

Проблемы с динамической памятью

В приведённом ниже коде не получается использовать динамическую память.
Я выделяю указателю динамическую память под max элементов , далее пытаюсь записать в часть памяти несколько значений для дальнейшего сравнения. Например
*parr = 2; *(parr + 1) = 3; *(parr + 2) = 5;
Но указатель не переходит выше по элементам , а пишет всё в один (точнее переписывает значение в этом же элементе)
long* parry(nullptr); // пустой указатель. long trial = 5; // кандидат на простое число. int count = 3; // кол-во простых чисел (объявленных) int found = 0; // признак обнаружения простого числа. int max2 = 0; // определяем кол-во простых чисел
cout << "enter the numbers of digits: "; cin >> max2;
parry = new long[max2]; // выделяю память под max2 элементов. // // собственно проблема на следующей строке. *parry = 2; // пишу в первый элемент 2. *(parry + 1) = 3; // пишу во второй элемент 3. *(parry + 2) = 5; // пишу в 3-ий 5.
do { trial += 2; found = 0;
for (int i = 0; i < count; ++i) { found = (trial % *(parry + i)) == 0;
if (found) break; } if(found == 0) *(parry + count++) = found;
} while (count < max2);
for (int i = 0; i < max2; ++i) { if (i % 5 == 0) cout << endl; cout << setw(6) << *(parry + i); } delete[] parry; parry = nullptr; cout << endl;
return 0; }


Ответ

Измените код
if(found == 0) *(parry + count++) = found;
на следующий
if(found == 0) *(parry + count++) = trial;
У вас происходит заполнение нулями и при следующих итерациях идёт деление на ноль вот тут
found = (trial % *(parry + i)) == 0;
Работающий пример

Комментариев нет:

Отправить комментарий