gpt4 book ai didi

c++ - 指针自动初始化为 NULL

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:11 28 4
gpt4 key购买 nike

今天我遇到了一个奇怪的情况,我未初始化的指针被自动初始化为NULL。

示例代码

class A
{
public:
A(): ptr1(NULL) {}

void Fun()
{
if (ptr2 != NULL && ptr2->Status())
{
...
...
}
}

private:
XYZ* ptr1;
ABC* ptr2;
};

当我将我的代码与现有项目集成时,由于野指针 (ptr2),它开始在 if 条件下崩溃。然后我恢复了我的代码并在构造函数处放置了一个断点,我可以看到这个指针(ptr2)是用 NULL 初始化的!!!。这是怎么发生的,没有人初始化这个指针并且它在过去 1 年多的时间里在不同的 PC (Ubuntu) 上运行没有任何问题?

最佳答案

ptr2 确实没有被构造函数初始化,这与 ptr1 不同。

因此读取该指针值的行为(更不用说取消引用它了)未定义。这种未定义行为的一种表现形式是您的编译器为您将其设置为 nullptr,另一种表现形式是崩溃。

是时候将构造函数更改为

A(): ptr1(nullptr), ptr2(nullptr) {}

关于c++ - 指针自动初始化为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48300080/

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