在什么情况下,在控制进入main()函数之前发生了崩溃?

时间:2010-09-07 13:11:28

标签: c++

  

可能重复:
  Is there any way a C/C++ program can crash before main()?

嗨,在什么情况下,应用程序在控制到达main()函数之前崩溃了? 到目前为止我的理解:全局和全局静态初始化发生在main()之前。因此,如果初始化顺序不正确,则在使用未初始化的指针等时可能会导致崩溃。

可能的解决方案:使用函数获取静态指针值,以便它们可以初始化并返回正确的指针。

我读了一些类似的线程 Program crashes in debugger before anything happens

我正在寻找更多信息。 这种崩溃还有其他任何情况吗? 什么是避免这种崩溃的解决方案?

3 个答案:

答案 0 :(得分:4)

全局对象和静态类数据成员在调用main()之前调用其构造函数。如果这些构造函数崩溃,程序会在调用main()之前崩溃。这是避免全局变量的众多好理由之一。

如果您遇到许多全局变量,可以通过将断点或调试输出放入其构造函数来调试它们。依赖性问题可以通过将全局变量转换为首次使用时构造的函数局部静态来解决。

答案 1 :(得分:2)

你已经给自己的大部分驴子了。 但这里有一些额外的信息:

在visual c ++中,您可以使用以下命令控制初始化顺序:

#pragma init_seg(...)

在gcc中它是这样的:

__attribute__ ((init_priority (2000)))

您现在可以阅读有关详细信息的相应文档。

答案 2 :(得分:1)

  • 如果您使用耗尽可用内存的过大的全局成员,程序将在主程序之前崩溃或被操作系统杀死。

  • 如果您的程序与具有初始化代码的动态库链接,则该代码可以

    在main之前运行,具体取决于您的操作系统。该代码可能崩溃。

  • 许多其他脑卒中案件故意崩溃。