c - GDB 调试器的段错误 - C

标签 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: ");
    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/

相关文章:

c++ - 处理c中的插件

c - 段错误总是在 3 个输入后发生

c - 在 C 中,如何确保初始化字符串的长度小于指定的长度

c - 使用指针获取数组的长度

php - symfony2 中的 var_dump 数据过多

c++ - 保护类内存数组检测段错误

c - 在 C Win32 中使用 hBitmap = CreateDIBSection() 保存 .bmp 文件

c - 在 C 中覆盖 _init 函数,它有多安全?

java - Eclipse 中的异常断点 - 如何检查异常对象?

matlab - 从函数调用 dbstep