c - 这个程序怎么会在最后一行(返回 0;)之后崩溃?

标签 c segmentation-fault

<分区>

我有一个程序,分成多个文件,有很多代码包含数组、指针、结构等等。

进入正题:这是我的 main() 方法的最后几行;

   ...
   printf("\nLast line!");
   return 0;
}

我在没有警告的情况下编译了这个程序后,我执行了它,在我的控制台中我得到了文本:Last line! 在我的 CMD 之后程序崩溃了(没有响应)。

我经常使用 printf() 来调试我的代码并确定我的代码中程序崩溃的那一行。在这种情况下,我无法理解程序在最后一行代码之后崩溃的事实。

我的问题:

  • main 函数中的 return 0; 会导致崩溃吗?
  • 是否有可能由于我程序中早期未定义的行为导致程序崩溃?
    • 如果是这样,我该如何调试我的代码? (我使用的是 Windows 7)

注意:我确定我的代码中只有一个 printf("\nLast line!");

最佳答案

could return 0; in the main() function cause a crash?

仅就声明而言,不,它不会导致崩溃

And is it possible the program crashes due to undefined behavior earlier in my program?

是的。很可能是这样。您调用了 undefined behaviour在您的代码中较早的某个地方,如您所知,结果是未定义的。

If so, how can I debug my code?

尝试通过调试器和内存检查器运行您的程序,例如 linux 上的 gdb 和 valgrind。此外,请尝试在您的代码中棘手 区域添加断点,并在检查实际值与预期值的同时单步执行调试器。您很可能会发现错误。

关于c - 这个程序怎么会在最后一行(返回 0;)之后崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519355/

相关文章:

c - CS50 的 pset4 上的段错误

c++ - 使用枚举的奇怪 SIGSEGV(段错误)

c - 如何在 C 中检查 ndarray 的数据类型

c : multidimensional array using 1d array under the covers

C++ isMember 函数崩溃

c++ - main 之外的段错误

python - 使用 -lwiringPy 在 C 中编译 Python 模块

c - 如何避免在 Linux 中通过本地堆栈进行路由

c - 如何在不使用 isalpha 的情况下验证 C 中的名称?

c - 取消引用 char 指针会导致段错误