我只是从C入手,并从总体上从计算机科学入手,而我的手册(C编程,Stephen G. Kochan的第四版)以创建素数列表的程序为例。我决定在检查其实现之前自己尝试一下,并添加一个选项,使用户可以决定要查找素数的数字。我在GCC编译器中使用Code :: Blocks。
每次输入数字时,我都会收到以下错误消息:分段错误(核心已转储)。
我知道这意味着我正在尝试访问内存,但我无法“允许”访问内存,但是我无法弄清楚代码的哪一部分产生了它。这是我的代码:
#include <stdio.h>
#include <stdbool.h>
int main (void)
{
int uNumber, divisor;
bool isPrime;
printf("Until what number do you want to check? ");
scanf("%i", uNumber);
for (uNumber; uNumber>=2; uNumber--)
{
isPrime = true;
for (divisor=uNumber - 1; divisor >=2; divisor--)
if (uNumber % divisor == 0)
isPrime= false;
if (isPrime != false)
printf("%i", uNumber);
}
}
问题在这里:
scanf("%i", uNumber);
%i
格式说明符需要指向int
的指针,即int *
。因为C中的参数是按值传递的,所以它需要一个指针,以便可以将其写入调用函数中的变量。]>
您要传递的是int
。然后,此变量的当前值将被视为有效的指针值(很可能不是),这将导致程序崩溃。
使用地址运算符&
传递uNumber
的地址:
scanf("%i", &uNumber);