gpt4 book ai didi

c++ - 使用全局对象时崩溃,但使用本地对象时不会崩溃

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:32 25 4
gpt4 key购买 nike

我正在尝试使用 libconfig为我的程序创建一个配置文件。有两种情况,一种完美运行(本地范围对象),另一种失败(全局范围对象)。我试图理解为什么一个失败而另一个成功,因为我的理解是两者都是创建相同对象的定义(只是在不同的范围内)。

1st(不起作用):我在全局范围内定义了一个 Config 对象。然后我在 Config 对象上调用 readFile。程序在这里崩溃。

#include <libconfig.h++>

libconfig::Config cfg;

int __attribute__((constructor)) Init()
{
cfg.readFile("/home/jalius/csgo-internal/hack.cfg");
}

第二个(有效):我定义了一个本地 Config 对象并对其调用了 readFile。

#include <libconfig.h++>

int __attribute__((constructor)) Init()
{
libconfig::Config cfg;
cfg.readFile("/home/jalius/csgo-internal/hack.cfg");
}

最佳答案

当您当时调用 int __attribute__((constructor)) Init() 函数时,cfg 对象在您的情况下。因为调用属性constructor修饰的函数和静态存储持续时间的C++对象的调用顺序是未指定的。由于对象不存在,因此您会收到段错误,即 SIGSEGV 信号。

以下是 GCC website 的摘录:

at present, the order in which constructors for C++ objects with static storage duration and functions decorated with attribute constructor are invoked is unspecified. In mixed declarations, attribute init_priority can be used to impose a specific ordering.

参见 this page 上的 constructor 部分获取更多信息。

关于c++ - 使用全局对象时崩溃,但使用本地对象时不会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47746061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com