prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 16.4

Q我有一个程序,它似乎运行正常,但在退出时崩溃了,是在 main() 中的最后一个语句之后main()的最后一条语句之后。这可能是由什么原因引起的?


A至少有三件事需要检查:

  1. 如果在之前的声明中缺少分号,main可能会被意外地声明为返回一个结构体,这与运行时启动代码的期望相冲突。请参阅问题 2.1810.911.12b11.14a
  2. 如果setbufsetvbuf被调用,并且如果提供的缓冲区是自动的、局部变量的main(或任何函数),当 stdio 库尝试执行其最终清理时,该缓冲区可能已不存在。
  3. 由 ... 注册的清理函数atexit可能存在错误。也许正在尝试引用局部于main或某个不再存在的其他函数的局部数据。
(第二个和第三个问题实际上与问题 7.5a 密切相关;另请参阅问题 11.16)。

参考文献:CT&P 第 5.3 节 pp. 72-3


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管