在 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);
我刚开始学习 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);