我有一个 c++ 代码,它在执行 main() 之前在启动时崩溃,问题可能出在哪里? [复制]

Posted

技术标签:

【中文标题】我有一个 c++ 代码,它在执行 main() 之前在启动时崩溃,问题可能出在哪里? [复制]【英文标题】:I have an c++ code which crashes on startup before reaching execution of main() where might the issue reside? [duplicate] 【发布时间】:2016-08-22 04:29:29 【问题描述】:

我是本科生,我的导师问我这个问题,你能帮我解决这个问题吗? 我已经在谷歌上搜索过了,但我仍然很困惑。

有没有工具可以找出崩溃的原因?

非常感谢您的宝贵时间。

【问题讨论】:

是的 - 它称为调试器。你在什么平台上 请提供一些代码。或者,你也可以DEBUG自己去发现。 Windows 中的一个常见原因是找不到所需的 DLL。 ***.com/questions/2518415/… int foo() return *((int*)0); int global = foo(); int main() 【参考方案1】:

在实际执行开始之前会发生几件事。我首先想到的是全局变量的初始化。例如:

#include <cstdlib>

int getSomeValue()
    // some code to produce crash, e.g. as suggested by Barmar...
    abort();
    return 0;


int value = getSomeValue();

int main()
    return 0;

关于如何找到此类错误的问题,答案是:使用调试器。

【讨论】:

只是为了清楚 - 此代码在 main 之前不会崩溃 其实我不确定... @pm100 但在 main 启动之前没有初始化全局变量? getSomeValue 必须导致崩溃。全局变量在main 之前初始化。 static(函数级别)变量在首次使用时被初始化 @Ajay 所以你同意我的示例在 main 之前崩溃?【参考方案2】:

正如@tobi303 所说,全局变量在main 之前初始化。

如果这些全局变量之一是对象,则该对象的构造函数在main 之前运行。

如果该构造函数调用其他函数,那么这些函数也会在 main 之前调用。

class SelfCrashing

public:
    SelfCrashing()  int x = *(int*)NULL;  // Deliberate crash
;

SelfCrashing myGlobal; // Default Constructor called

int main()

    /* Program never got here */

【讨论】:

以上是关于我有一个 c++ 代码,它在执行 main() 之前在启动时崩溃,问题可能出在哪里? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

linux上的C++代码比windows上慢得多[关闭]

C++语言怎么在main函数执行之前执行一段代码

蓝桥ROS机器人之C++基础1总结和测评

c ++不让main返回[关闭]

如何在 main() 执行之前先运行其它函数

编一个C++程序 创建一个选择排序法的函数模板sort 并在main()执行