C 在最后一行(返回0;)后,此程序如何崩溃?
我有一个程序,分为多个文件,有很多代码包含数组、指针、结构等等 说到这里:这是我的C 在最后一行(返回0;)后,此程序如何崩溃?,c,segmentation-fault,C,Segmentation Fault,我有一个程序,分为多个文件,有很多代码包含数组、指针、结构等等 说到这里:这是我的main()方法的最后几行 。。。 printf(“\n最后一行!”); 返回0; } 在我编译了这个没有警告的程序之后,我执行了它,在我的控制台中我得到了文本:最后一行在我的命令中,然后程序崩溃(不响应) 我经常使用printf()调试代码,并确定程序崩溃的代码行。在这种情况下,我无法理解程序在最后一行代码之后崩溃的事实 我的问题是: 不能返回0是否导致崩溃 是否有可能由于我的程序早期未定义的行为而导致程序崩
main()
方法的最后几行
。。。
printf(“\n最后一行!”);
返回0;
}
在我编译了这个没有警告的程序之后,我执行了它,在我的控制台中我得到了文本:最后一行代码>在我的命令中,然后程序崩溃(不响应)
我经常使用printf()
调试代码,并确定程序崩溃的代码行。在这种情况下,我无法理解程序在最后一行代码之后崩溃的事实
我的问题是:
- 不能
返回0主函数中的代码>是否导致崩溃
- 是否有可能由于我的程序早期未定义的行为而导致程序崩溃?
- 如果是,我如何调试我的代码?(我正在使用Windows 7)
注意:我确信只有一个printf(“\n最后一行!”)代码>在我的代码中
不能返回0main()
函数中的code>是否会导致崩溃
单就声明而言,不,它不会导致崩溃
有没有可能是由于我的程序早期未定义的行为导致程序崩溃
对。很可能是这样。您在代码前面的某个地方调用了它,并且正如您所知,结果是未定义的
如果是,我如何调试我的代码
尝试通过调试器和内存检查器运行程序,如linux和valgrind上的gdb
。此外,您还可以在代码中的棘手区域添加断点,并在检查实际值与预期值的同时逐步完成调试器。最有可能的是,您将能够发现错误
不能返回0main()
函数中的code>是否会导致崩溃
单就声明而言,不,它不会导致崩溃
有没有可能是由于我的程序早期未定义的行为导致程序崩溃
对。很可能是这样。您在代码前面的某个地方调用了它,并且正如您所知,结果是未定义的
如果是,我如何调试我的代码
尝试通过调试器和内存检查器运行程序,如linux和valgrind上的gdb
。此外,您还可以在代码中的棘手区域添加断点,并在检查实际值与预期值的同时逐步完成调试器。最有可能的是,您将能够发现错误 也停止使用printf()代码>尝试一个好的调试器,比如(gdb
)调试C代码更简单、更快速同时停止使用printf()代码>尝试一个好的调试器,比如(gdb
)调试C代码更简单、更快速。“还有可能是我的程序早期的未定义行为导致程序崩溃吗?”--是的。谷歌“返回语句中的分段错误”,你会在这上面找到很多结果。@CoolGuy好的,所以现在我必须找到它:)唉:“编译这个程序时没有警告”只意味着你的程序不包含语法错误。逻辑错误,如覆盖您不拥有的内存或除以零,不会导致编译器警告或错误。当您说“在此之后程序崩溃(不响应)”是什么意思?它是崩溃了,还是只是“没有反应”?“不回应”是什么意思?当您从main()返回时,您希望它做什么?好的,那么您破坏了堆栈并吹走了main()返回地址?“是否有可能由于我的程序前面未定义的行为而导致程序崩溃?”--是的。谷歌“返回语句中的分段错误”,你会在这上面找到很多结果。@CoolGuy好的,所以现在我必须找到它:)唉:“编译这个程序时没有警告”只意味着你的程序不包含语法错误。逻辑错误,如覆盖您不拥有的内存或除以零,不会导致编译器警告或错误。当您说“在此之后程序崩溃(不响应)”是什么意思?它是崩溃了,还是只是“没有反应”?“不回应”是什么意思?当您从main()返回时,您希望它做什么?好的,那么您破坏了堆栈并吹走了main()返回地址?