代码之家  ›  专栏  ›  技术社区  ›  bjskishore123

在什么情况下,在控件进入main()函数之前会发生崩溃?[副本]

c++
  •  1
  • bjskishore123  · 技术社区  · 15 年前

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

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

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

    我读了一点类似的线索 Program crashes in debugger before anything happens

    我正在寻找更多的信息。 有没有其他类似车祸的情况? 如何避免此类车祸?

    3 回复  |  直到 15 年前
        1
  •  4
  •   sbi    15 年前

    全局对象和静态类数据成员以前调用过它们的构造函数 main() 被调用。如果这些构造函数崩溃,程序将在 主体() 被调用。这是避免全球化的许多好理由之一。

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

        2
  •  2
  •   Ole Dittmann    15 年前

    你的大部分问题都已经给了你自己。 但这里有一些附加信息:

    在VisualC++中,您可以用以下方式控制初始化顺序:

    #pragma init_seg(...)
    

    在GCC中,类似于:

    __attribute__ ((init_priority (2000)))
    

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

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

    • 如果程序与具有初始化代码的动态库链接,则该代码 能够 根据操作系统的不同,在主系统之前运行。那个代码可能崩溃。

    • 许多其他的脑死案件,当它故意崩溃。