Пожалуйста, взгляните на этот код на C. Это небольшая программа, которую я написал, которая принимает число n в качестве входных данных и вычисляет все простые числа от 2 до n. Он отлично работает, когда n < 100, но если я ставлю 1000 или более, он сработает. Я не могу понять, почему, поскольку массив, в котором хранятся числа, динамически распределяется, поэтому недостаток памяти не должен быть проблемой.Сбой программы на больших входах (C)
Итак, почему программа сбой на больших входах?
Кроме того, я прошу прощения за плохое считывание кода. Я только начинаю программировать.
код
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int n;
int *array = malloc((n-1)*sizeof array);
int q = 0;
int k;
int *array2;
printf("Geben Sie eine natuerliche Zahl n ein: ");
scanf("%d", &n);
printf("\n");
for(i=0; i<=n-2; i++){
array[i] = i+2;
}
while(q<=n-2){
while(array[q]==0&&q<=n-2){
q++;
}
for(i=q+1; i<=n-2; i++){
if(array[i]%array[q]==0){
array[i] = 0;
}
}
q++;
}
PART1:
for(i=0; array[i]!=0; i++){
if(array[i+1]==0){
int j;
for(j=i+1; j<=n-2; j++){
if(array[j]!=0){
array[i+1] = array[j];
array[j] = 0;
goto PART1;
}
}
k = i;
goto PART2;
}
}
PART2:
*array2 = malloc((k+1)*sizeof array2);
for(i=0; i<=k; i++){
array2[i]=array[i]; //Here's where the program crashes
}
free(array);
for(i=0; i<k; i++){
printf("%d ,", array2[i]);
}
printf("%d\n\n", array2[k]);
free(array2);
return 0;
}
CodeBlocks отладчик говорит: программа получила сигнал SIGSEGV, сбой сегментации, в строке 53. Я отметил его в коде.
Какая авария? Вы пробовали отладчик, чтобы точно определить, где/как он сбой? –
используйте gdb, чтобы увидеть, где он падает, и опубликуйте это. одна проблема: вы являетесь «распределением массива на основе (неопределенного n)» перед сканированием f для n. аналогично, содержимое массива не определено в вашем первом цикле. – amdixon
codeblocks debugger говорит: запрограммированный сигнал SIGSEGV, ошибка сегментации в строке 53. Я пометил его в коде. Но я не знаю, что это значит. – Arthur