c++ Clion警告“局部变量的地址可能会转义函数”

3gtaxfhh  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(314)

我刚开始学习C++,正在尝试使用二叉树。我找不到答案,如果我应该修复这个警告“局部变量的地址可能会转义函数”?我有类BinaryTree。这个类有两个指针BinaryTree * left = nullptr;BinaryTree * right = nullptr;。我的类也有方法void BinaryTree::randomTree(bool grow, bool actDepth, short maxDepth, short depth = 0)
从一开始我就做空树

BinaryTree tmpTree = BinaryTree(
                minDepth,
                mProbability,
                cProbability
        );

然后我想种这棵树

tmpTree.randomTree(
                (bool) Helper::fiftyFifty(),
                (bool) Helper::fiftyFifty(),
                Helper::getRandomNumber(minDepth, maxDepth + 1)
        );

randomTree方法中有一个警告

... some code ...
        BinaryTree lTmpTree = BinaryTree(
                this->minDepth,
                this->mProbability,
                this->cProbability
        );
        this->left = &lTmpTree;  // <---- I have warning there

        this->left->randomTree(grow, actDepth, maxDepth, depth + (short) add);
... some code ...

请告诉我,我是否应该担心这个警告?

ldioqlga

ldioqlga1#

这是一个作用域问题,你创建了一个局部变量,lTmpTree,当你退出局部作用域时,它会被销毁。
但是,您将获取对该局部变量的引用

this->left = &lTmpTree;

这是很危险的,因为正如前面提到的,lTmpTree在你离开本地作用域时会被破坏,这意味着lTmpTree的位可能仍然正确地存在于内存中,如果它们没有被重新分配给其他的东西,但是你不能指望它,这就是为什么你会得到警告。

相关问题