繁体   English   中英

无法使用指向指针的指针的值获得相同的指针值?

[英]Can't get the same value of a pointer using the value of a pointer to pointer?

程序崩溃。 我正在尝试实现一个Brick ** create_bricks() function,它返回一个指向 Brick 指针的指针(因为我想创建一个 Bricks 数组并返回第一个的 position)。 我把头发拉出来,在几次尝试失败、错误和研究之后,我做的最后一件事是简化我的代码并逐行检查指针的值。 当我在 draw function 游戏循环中将the_brick取消引用为*the_brick时,它不会获得与new Brick()create_bricks() function 中分配给ptr_brick的值相同的值。 我正在使用 SFML,但问题在于指针。

注意:如果我从create_bricks返回Brick *并进行适当修改,它可以正常工作(并绘制砖),但我需要创建多个砖,而不仅仅是一个。

#include "Brick.h"

int main()
{
    ...

    while (window.isOpen())
    {
        Brick ** ptr_bricks = create_bricks();
        Brick * ptr_brick = *ptr_bricks;
        window.draw(*the_brick);
    }
    return 0;
}
Brick ** create_bricks()
{
    Brick * ptr_brick = new Brick();
    ptrBrick->setPosition(150, 20);
    return &ptrBrick;
}
#include "Brick.h"

Brick::Brick()
{
    LOG(INFO) << "Brick constructor";

    setPosition(10, 10);
    setSize(sf::Vector2f(100, 20));
    setFillColor(sf::Color::Green);
    setOutlineThickness(1);
}

Brick::~Brick()
{
    LOG(INFO) << "Brick destructor";
    //dtor
}

谢谢

问题是create_bricks function中的return语句:

return &ptrBrick;

在这里,您返回一个指向局部变量ptrBrick的指针。 此变量的生命周期将在 function 结束时结束,并且您拥有的任何指向它的指针将在 function 结束后立即失效。

从 function 返回“数组”的自然 C++ 解决方案是返回std::vector

std::vector<Brick*> create_bricks()
{
    Brick* brick = new Brick;
    brick->setPosition(150, 20);
    return { brick };
}

如果Brick不是多态 class 您甚至不需要使用指针向量,而是使用普通Brick对象的向量( std::vector<Brick> )。

如果您坚持使用指针,则必须分配一个指向Brick的指针数组,这意味着new Brick*[number_of_bricks] (如果不需要多态性,则为new Brick[number_of_bricks] )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM