Prime编号程序在C中生成“分段故障(内核已转储)”错误消息

问题描述 投票:0回答:1

我只是从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);
        }
}

c codeblocks
1个回答
0
投票

问题在这里:

scanf("%i", uNumber); 

%i格式说明符需要指向int的指针,即int *。因为C中的参数是按值传递的,所以它需要一个指针,以便可以将其写入调用函数中的变量。]​​>

您要传递的是int。然后,此变量的当前值将被视为有效的指针值(很可能不是),这将导致程序崩溃。

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

scanf("%i", &uNumber); 
© www.soinside.com 2019 - 2024. All rights reserved.