gpt4 book ai didi

c++ - 在Windows中初始化静态全局变量时new返回NULL?

转载 作者:可可西里 更新时间:2023-11-01 11:14:58 28 4
gpt4 key购买 nike

我正在努力将 rLog 与我们的代码库集成,我注意到 Windows 上存在一个在 Linux 上没有的问题。在头文件中,我有一个静态变量,它给了我一个“详细”的日志记录 channel (基本上是从调试开始的),定义如下:

static RLogChannel *rlog_verbose = DEF_CHANNEL("verbose", Log_Debug);

这在 Linux 上没有问题,但在 Windows 上,应用程序一启动我就会收到错误消息。

我已经在 rLog 库中追踪到这一行:

RLogChannel *rlog::GetComponentChannel(const char *component, const char* path, LogLevel levl) {
...
if(!gRootChannel)
gRootChannel = new RLogChannel( "", level );
...
}

问题是对 new 的调用返回一个 NULL 指针,该指针未经检查并且程序在访问时立即崩溃。在 Windows 上的全局上下文中是否存在我没​​有忘记的与分配内存相关的规则?

编辑:我很确定这一定与静态对象的初始化顺序有关。我想确定我没有遗漏一些明显的问题:Windows 上的内存分配。谢谢大家!

最佳答案

你确定它返回 null 吗?这可能是整个静态初始化程序的事情。静态初始化程序调用的顺序未在文件之间定义。如果您有使用 rlog_verbose 的静态代码,那么 gRootCHannel 很可能是 NULL,因为尚未调用初始化程序。

关于c++ - 在Windows中初始化静态全局变量时new返回NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248992/

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