Итак, эта функция, которую я создал, использует алгоритм решета Эратосфена для вычисления всех простых чисел ‹= n. Эта функция сохраняет простые числа и количество простых чисел в параметрах.
Когда функция завершается, простые числа должны указывать на участок динамически выделенной памяти, в котором хранятся все простые числа ‹= num. *count будет иметь количество простых чисел.
Вот моя функция getPrimes:
void getPrimes(int usernum, int* count, int** array){
(*count) = (usernum - 1);
int sieve[usernum-1], primenums = 0, index, fillnum, multiple;
//Fills the array with the numbers up to the user's ending number, usernum.
for(index = 0, fillnum = 2; fillnum <= usernum; index++, fillnum++){
sieve[index] = fillnum;
}
/*Starts crossing out non prime numbers starting with 2 because 1 is not a prime. It then deletes all of those multiples and
moves on to the next number that isnt crossed out, which is a prime. */
for (; primenums < sqrt(usernum); primenums++){ //Walks through the array.
if (sieve[primenums] != 0){ //Check's if that number is 0 which means it's crossed out
for (multiple = (sieve[primenums]); multiple < usernum; multiple += sieve[primenums]){ //If it is not crossed out it starts deleting its multiples.
//Crossing multiples out and decrements count to move to next number
sieve[multiple + primenums] = 0;
--(*count);
}
}
}
int k;
for (k = 0; k < usernum; k++)
if (sieve[k] != 0){
printf(" %d", sieve[k]);
}
printf(" ");
array = malloc(sizeof(int) * (usernum + 1));
assert(array);
(*array) = sieve;
}
Моя функция здесь отлично компилируется, однако я заметил, что у меня есть ошибка сегментации, когда я пробую большие числа, например, 101. Кто-нибудь видит, где мой код вызывает ошибку сегментации?