我正在尝试使用 GDB 调试器“调试”该程序。当我执行程序时,出现段错误(核心转储)。 这是我第一次使用 GDB,所以我真的不知道该使用什么命令或期望什么。
编辑:我知道错误是什么。我需要使用 GDB 调试器找到它
这是代码:
#include <stdio.h>
int main()
{
int n, i;
unsigned long long factorial = 1;
printf("Introduzca un entero: ");
scanf("%d",n);
if (n < 0)
printf("Error! Factorial de un numero negativo no existe.");
else
{
for(i=0; i<=n; ++i)
{
factorial *= i;
}
printf("Factorial de %d = %llu", n, factorial);
}
return 0;
}
最佳答案
问题是这样的:
scanf("%d",n);
正如您所写,n 被声明为 int 类型的变量。您想要做的是将 n 的地址而不是 n 本身传递到函数中。
scanf("%d", &n);
为了更好地理解 scanf() 的实现,请查看 stdio.h。
此外,设置 n = 1。否则,无论您经历了多少次循环,变量阶乘都将保持为 0。
编辑:您想要做的是访问用户传入的内存位置,这很可能映射到属于完全不同的进程甚至操作系统的内存位置。段错误的产生仅仅是因为该位置不可访问。您可以在 gdb 中执行的操作是在 gdb 中使用 bt 来跟踪段错误的堆栈。
关于c - GDB 调试器的段错误 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46749834/