Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 主端Seg故障,提供GDB输出_C_Segmentation Fault_Gdb_Ncurses - Fatal编程技术网

C 主端Seg故障,提供GDB输出

C 主端Seg故障,提供GDB输出,c,segmentation-fault,gdb,ncurses,C,Segmentation Fault,Gdb,Ncurses,对不起,我是c编程新手 正如标题所说,代码可以完美地运行到main的末尾,返回0。然后,它给出了一个seg故障,没有任何原因。一些回答说,也许我没有释放我所失去的一切,但我确实释放了。所以我试着用gdb找出原因。这是我第一次用它 这是输出: Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7644f1d in ?? () from /lib/x86_64-linux-gnu/libc.so.6 (gdb) bt #0

对不起,我是c编程新手

正如标题所说,代码可以完美地运行到main的末尾,返回0。然后,它给出了一个seg故障,没有任何原因。一些回答说,也许我没有释放我所失去的一切,但我确实释放了。所以我试着用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程序,我可以(我相信我是)成功地创建屏幕,然后关闭它。我检查了所有malloced变量是否也已释放

Run在一个不同的c文件中,我在其中绘制ncurses板


任何帮助都将不胜感激

不确定gdb是否会在腐败真正发生时提供准确的位置。(回溯表明它是与堆栈相关的)

对于此类错误,最好的工具是Valgrind,使用它运行应用程序


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

当没有参数传递给程序时,您有未定义的行为。@zenith抱歉,这是什么意思?那不是空校验器吗?还是我在想别的什么?
argv[1]==NULL
应该是
argc<2
您的
run()
方法可能正在损坏堆栈。尝试使用更简单版本的
run()
重现问题。尝试在valgrind中运行它