GDB调试器的分段错误-C

GDB调试器的分段错误-C,c,debugging,segmentation-fault,gdb,C,Debugging,Segmentation Fault,Gdb,我正在尝试使用GDB调试器“调试”这个程序。当我执行程序时,我得到了分段错误(内核转储)。 这是我第一次使用GDB,所以我真的不知道该使用什么命令,也不知道该期待什么 编辑:我知道错误是什么。我需要使用GDB调试器找到它 代码如下: #include <stdio.h> int main() { int n, i; unsigned long long factorial = 1; printf("Introduzca un entero: ");

我正在尝试使用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;
}
#包括
int main()
{
int n,i;
无符号长阶乘=1;
printf(“肠道介绍”);
scanf(“%d”,n);
if(n<0)
printf(“错误!不存在数字负数的阶乘”);
其他的
{
对于(i=0;i而言,问题在于:

scanf("%d",n);
正如您所写,n被声明为int类型的变量。您要做的是将n的地址而不是n本身传递到函数中

scanf("%d", &n);
要更好地理解scanf()的实现,请查看stdio.h

另外,设置n=1。否则,无论经过多少次循环,变量factorial都将保持为0

编辑:您要做的是访问用户传入的内存位置,该位置很可能映射到属于完全不同进程甚至操作系统的内存位置。分割错误的产生只是因为该位置不可访问。您可以在gdb中使用gdb t中的bto分段故障的堆栈跟踪

我知道错误是什么。我需要使用GDB调试器找到它

您需要阅读(并且您应该使用所有警告和调试信息编译源代码,例如,
gcc-Wall-Wextra-g
;这会将调试信息放入可执行文件中)

GDB用户手册包含一个部分。您应该仔细阅读它,并在终端中试验
GDB
。将帮助您逐步运行程序,并查询其状态(以及事后分析)。这样,您就可以了解发生了什么

不要期望我们重复教程部分中的内容

还可以尝试
gdb-tui
选项


注意:不要指望StackOverflow告诉你什么是容易的、有很好文档记录的。你应该在询问之前找到并阅读文档。

scanf(“%d”,n);
-->
scanf(“%d”,n)
i=0;
-->
i=1;我不是要求你直观地查找错误。我的意思是使用GDB调试器。无论你是否使用GDB,它都会给你分段错误。你是说如何使用GDB查找和跟踪问题?