我有一个 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() 之前在启动时崩溃,问题可能出在哪里? [复制]的主要内容,如果未能解决你的问题,请参考以下文章