c - Main 端出现段错误,提供 GDB 输出

标签 c segmentation-fault gdb ncurses

对不起,我是c编程的新手

正如标题所说,代码运行完美,直到 main 的末尾返回 0。然后它给出了一个段错误,没有任何原因。一些答案说,也许我没有释放我分配的所有东西,但我做到了。所以我尝试使用 gdb 找出原因。这是我第一次使用它。

这是输出:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7644f1d in ?? () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0  0x00007ffff7644f1d in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff76450aa in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007ffff760365b in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x00007ffff76036f5 in exit () from /lib/x86_64-linux-gnu/libc.so.6
#4  0x00007ffff75eaecc in __libc_start_main ()
   from /lib/x86_64-linux-gnu/libc.so.6
#5  0x0000000000400bc9 in _start ()

我的主要内容:

int main(int argc, char *argv[]) {

    if(argv[1] == NULL)
    {
        printf("Please enter the path to the map generating file as an argument.\n");
        exit(0);
    }

    run(getName(), argv[1]);
    return 0;
}

我的程序是一个 ncurses 程序,我可以(我相信我是)成功创建屏幕然后关闭它。我检查过所有分配的变量也已被释放。

运行在不同的 c 文件中,我在其中绘制 ncurses 板。

如有任何帮助,我们将不胜感激。

最佳答案

不确定 gdb 是否会在损坏真正发生时为您提供确切位置。 (回溯表明它是与堆栈相关的)

对于此类错误,最好的工具是 Valgrind,用它运行您的应用。

(根据我的经验,使用 Valgrind 可以在几分钟内追踪并消除内存损坏错误)

关于c - Main 端出现段错误,提供 GDB 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28848958/

相关文章:

c++ - 为什么不能给指针赋值?

c++ - DDD 调试器 : save A command history between sessions

c - 使用 wordwrap 2 的最佳消息框大小

c - 项目中的分段核心转储错误

c++ - 如何在 C++ 中正确递增返回的迭代器?

android - OSX 段错误 11 - Android

c++ - 是否可以在 GDB session 之间转移程序的控制权?

debugging - 什么可以在 Linux 中执行类似 Cheat-Engine 的任务?

c - 在 C 中混合 'switch' 和 'while'

c - 如何用 C 语言获取 d/m/y 格式的当前时间?