在 C 中生成 "Segmentation fault (core dumped)" 错误消息的质数程序

Prime number program generating a "Segmentation fault (core dumped)" error message in C

我刚开始学习 C 语言和计算机科学,我的手册(C 语言编程,Stephen G. Kochan 的第 4 版)使用了一个程序示例创建素数列表。我决定在检查他的实现之前自己尝试一下,并添加一个选项,用户可以在其中决定他想要找到质数的数字。我正在使用 Code::Blocks 和 GCC 编译器。

我每次键入数字时都会收到以下错误消息:分段错误(核心已转储)。

我知道这意味着我正在尝试访问我不能 "allowed" 访问的内存,但我无法弄清楚我的代码的哪一部分正在生成它。这是我的代码:

#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。此变量的当前值随后被视为有效指针值(很可能不是),这会导致程序崩溃。

使用address-of运算符&传递uNumber的地址:

scanf("%i", &uNumber);