LLVM分析器垃圾值

问题描述 投票:0回答:1

我在自定义容器上工作,并手动分配一些堆内存:

template<typename element_type>
class MyClass{
    element_type* m_data = nullptr;
    std::size_t rows, columns; // assume that they have been initialized

    inline MyClass(){
        this->m_data = new element_type[(this->rows)*(this->columns)]{};
        this->m_data_end = this->m_data+(this->rows)*(this->columns);
    }
};

当我对代码进行分析时,XCode(以及幕后的 LLVM-Clang)告诉我

this->m_data = new element_type[(this->rows)*(this->columns)]{};
正在存储垃圾值(未初始化的值)。我不明白我在这个例子中做错了什么。任何澄清将不胜感激。

对我来说,我正在按照这个接受的答案中的建议进行操作:https://stackoverflow.com/a/67967472/23051105

c++ clang heap-memory clang-static-analyzer
1个回答
0
投票

我不明白我在这个例子中做错了什么。

在进入构造函数主体之前,所有数据成员都已初始化(默认)。这意味着

rows
columns
保持单位化并具有 不确定值。因此,当您编写时,您正在使用这些未初始化的变量:

//-------------------------------------vvvv---------vvvvvvv----->these are uninitialized
this->m_data = new element_type[(this->rows)*(this->columns)]{};

因此,程序将具有未定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.